flowsim-0.3.3: src/Duplicator.hs
{- Extremely simple program to introduce duplicates -}
module Duplicator where
import System.IO
import System.Environment (getArgs)
import Bio.Sequence.Fasta
import Statistics
main :: IO ()
main = do
args <- getArgs
case args of [p] -> hReadFasta stdin >>= evalRandIO . dup (read p) >>= hWriteFasta stdout
_ -> error "Usage: duplicator pr\n where pr is the probability of recursively duplicating a sequence"
dup :: RandomGen g => Double -> [Sequence] -> Rand g [Sequence]
dup p (x:xs) = do
r <- getRandomR (0,1)
if r < p
then dup p (x:x:xs)
else do ys <- dup p xs
return (x:ys)
dup _ [] = return []