@@ -1,7 +1,6 @@
11module Main
22
33import System
4−import Data.Floats
54
65alu : String
76alu = "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG\
@@ -9,12 +8,12 @@ alu = "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG\
98 \CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC\
109 \GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"
1110
12−iub : List (Char, Float)
11+iub : List (Char, Double)
1312iub = [('a',0.27),('c',0.12),('g',0.12),('t',0.27),('B',0.02)
1413 ,('D',0.02),('H',0.02),('K',0.02),('M',0.02),('N',0.02)
1514 ,('R',0.02),('S',0.02),('V',0.02),('W',0.02),('Y',0.02)]
1615
17−homosapiens : List (Char, Float)
16+homosapiens : List (Char, Double)
1817homosapiens = [('a',0.3029549426680),('c',0.1979883004921)
1918 ,('g',0.1975473066391),('t',0.3015094502008)]
2019
@@ -30,10 +29,10 @@ splitAt' : Nat -> String -> (String, String)
3029splitAt' n s = let s' = unpack s in (pack $ take n s', pack $ drop n s')
3130
3231writeAlu : String -> String -> IO ()
33−writeAlu name s0 = putStrLn name $> go s0
32+writeAlu name s0 = putStrLn name *> go s0
3433 where
3534 go "" = return ()
36− go s = let (h,t) = splitAt' 60 s in putStrLn h $> go t
35+ go s = let (h,t) = splitAt' 60 s in putStrLn h *> go t
3736
3837replicate : Int -> Char -> String
3938replicate 0 c = ""
@@ -44,10 +43,10 @@ scanl f q ls = q :: (case ls of
4443 [] => []
4544 x::xs => scanl f (f q x) xs)
4645
47−accum : (Char,Float) -> (Char,Float) -> (Char,Float)
46+accum : (Char,Double) -> (Char,Double) -> (Char,Double)
4847accum (_,p) (c,q) = (c,p+q)
4948
50−make : String -> Int -> List (Char, Float) -> Int -> IO Int
49+make : String -> Int -> List (Char, Double) -> Int -> IO Int
5150make name n0 tbl seed0 = do
5251 putStrLn name
5352 make' n0 0 seed0 ""
@@ -55,7 +54,7 @@ make name n0 tbl seed0 = do
5554 modulus : Int
5655 modulus = 139968
5756
58− fill : List (Char,Float) -> Int -> List String
57+ fill : List (Char,Double) -> Int -> List String
5958 fill ((c,p) :: cps) j =
6059 let k = min modulus (cast (cast modulus * p + 1))
6160 in replicate (k - j) c :: fill cps k
@@ -65,13 +64,13 @@ make name n0 tbl seed0 = do
6564 lookupTable = Foldable.concat (fill (scanl accum ('a',0) tbl) 0)
6665
6766 make' : Int -> Int -> Int -> String -> IO Int
68− make' 0 col seed buf = when (col > 0) (putStrLn buf) $> return seed
67+ make' 0 col seed buf = when (col > 0) (putStrLn buf) *> return seed
6968 make' n col seed buf = do
7069 let newseed = modInt (seed * 3877 + 29573) modulus
7170 let nextchar = strIndex lookupTable newseed
7271 let newbuf = buf <+> singleton nextchar
7372 if col+1 >= 60
74− then putStrLn newbuf $> make' (n-1) 0 newseed ""
73+ then putStrLn newbuf *> make' (n-1) 0 newseed ""
7574 else make' (n-1) (col+1) newseed newbuf
7675
7776