{- 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 []         