1 
    2 
    3 
    4 
    5 
    6 
    7 
    8 
    9 
   10 
   11 
   12 
   13 
   14 
   15 
   16 
   17   module MyRandom (randomInts) where
   18 
   19 
   20 
   21 
   22   randomInts :: Int -> Int -> [Int]
   23   randomInts s1 s2 = if 1 <= s1 && s1 <= 2147483562 then
   24                      if 1 <= s2 && s2 <= 2147483398 then rands s1 s2
   25                      else error "randomInts: Bad second seed."
   26                      else error "randomInts: Bad first seed."
   27 
   28   rands :: Int -> Int -> [Int]
   29   rands s1 s2 =
   30       let
   31         k    = s1 `div` 53668
   32         s1'  = 40014 * (s1 - k * 53668) - k * 12211
   33         s1'' = if s1' < 0 then s1' + 2147483563 else s1'
   34         k'   = s2 `div` 52774
   35         s2'  = 40692 * (s2 - k' * 52774) - k' * 3791
   36         s2'' = if s2' < 0 then s2' + 2147483399 else s2'
   37         z    = s1'' - s2''
   38       in  if z < 1 then z + 2147483562 : rands s1'' s2''
   39                    else z : rands s1'' s2''
   40