module Gene where
import System.Random
import Data.Word
data Gene = A | C | G | T | N deriving (Ord,Show,Read)
instance Eq Gene where
A == A = True
A == _ = False
C == C = True
C == _ = False
G == G = True
G == _ = False
T == T = True
T == _ = False
N == _ = False
fromW8 :: Word8 -> Gene
fromW8 w = case w of
0 -> A
1 -> C
2 -> G
3 -> T
_ -> N
toW8 :: Gene -> Word8
toW8 g = case g of
A -> 0
C -> 1
G -> 2
T -> 3
N -> 4
revcompl :: [Gene] -> [Gene]
revcompl gs = rc [] gs
where
rc ss [] = ss
rc acc (x:xs) = rc (compl x : acc) xs
compl :: Gene -> Gene
compl A = T
compl T = A
compl C = G
compl G = C
compl N = N
instance Random Gene where
random g = let (c,g') = randomR (0::Int,3) g
in case c of
0 -> (A,g')
1 -> (C,g')
2 -> (G,g')
3 -> (T,g')
_ -> error "can't happen, but compiler warning"
randomR = error "randomR: not implemented"