Bioinformatics/Sequence mutation: Difference between revisions

m
Line 911:
type DNASequence = [DNABase]
 
data Result = ResultSwapped Mutation Int [(DNABase], DNABase)
| InsertDeleted Mutation Int DNABase
 
instance Random DNABase where
Line 942 ⟶ 943:
mutateSequence :: DNASequence -> IO (Result, DNASequence)
mutateSequence [] = fail "empty dna sequence"
mutateSequence ds = mutate dsrandomMutation >>=<< randomMutationmutate ds
where
randomMutation = head . randoms <$> newStdGen
Line 948 ⟶ 949:
i <- randomIndex (length xs)
case m of
Swap -> randomDNA >>= \d -> pure (ResultSwapped Swap i [(xs !! pred i, d]), swapElement i d xs)
Insert -> randomDNA >>= \d -> pure (ResultInsertDeleted Insert i [d], insertElement i d xs)
Delete -> pure (ResultInsertDeleted Delete i [(xs !! pred i]), dropElement i xs)
where
dropElement i xs = take (pred i) xs <> drop i xs
Line 961 ⟶ 962:
mutate 0 s = pure s
mutate n s = do
(Result m i br, ms) <- mutateSequence s
case mr of
SwapSwapped m i (a, b) -> printf "%6s @ %-3d : %s -> %s \n" m i (heada b) (last b)
_InsertDeleted m i a -> printf "%6s @ %-3d : %s\n" m i (head b)a
mutate (pred n) ms
 
Anonymous user