[project @ 2001-08-04 06:19:54 by ken]
[ghc-hetmet.git] / ghc / lib / std / Random.lhs
index 4a2a88d..a6c0055 100644 (file)
@@ -1,7 +1,10 @@
+% ------------------------------------------------------------------------------
+% $Id: Random.lhs,v 1.24 2001/02/28 00:01:03 qrczak Exp $
 %
-% (c) The GRASP/AQUA Project, Glasgow University, 1995-99
+% (c) The University of Glasgow, 1995-2000
 %
 
+\section[Random]{Module @Random@}
 
 The June 1988 (v31 #6) issue of the Communications of the ACM has an
 article by Pierre L'Ecuyer called, "Efficient and Portable Combined
@@ -30,17 +33,13 @@ module Random
 
 #ifndef __HUGS__
 import PrelGHC         ( RealWorld )
-import PrelNum         ( fromInt )
 import PrelShow                ( showSignedInt, showSpace )
 import PrelRead                ( readDec )
 import PrelIOBase      ( unsafePerformIO, stToIO )
 import PrelArr         ( STRef, newSTRef, readSTRef, writeSTRef )
-import PrelReal                ( toInt )
-import PrelFloat       ( float2Double, double2Float )
 import Time            ( getClockTime, ClockTime(..) )
 #else
-import privileged Prelude
-                       ( IORef
+import PrelPrim                ( IORef
                        , newIORef
                        , readIORef
                        , writeIORef
@@ -114,7 +113,7 @@ mkStdGen s
 createStdGen :: Integer -> StdGen
 createStdGen s
  | s < 0     = createStdGen (-s)
- | otherwise = StdGen (toInt (s1+1)) (toInt (s2+1))
+ | otherwise = StdGen (fromInteger (s1+1)) (fromInteger (s2+1))
       where
        (q, s1) = s `divMod` 2147483562
        s2      = q `mod` 2147483398
@@ -175,17 +174,9 @@ instance Random Double where
   random g       = randomR (0::Double,1) g
   
 -- hah, so you thought you were saving cycles by using Float?
-
-#ifdef __HUGS__
 instance Random Float where
   random g        = randomIvalDouble (0::Double,1) realToFrac g
   randomR (a,b) g = randomIvalDouble (realToFrac a, realToFrac b) realToFrac g
-#else
-instance Random Float where
-  randomR (a,b) g = randomIvalDouble (float2Double a, float2Double b) double2Float g
-  random g        = randomIvalDouble (0::Double,1) double2Float g
-#endif
-
 \end{code}
 
 
@@ -217,7 +208,7 @@ randomIvalInteger (l,h) rng
           let
           (x,g')   = next g
          in
-         f (n-1) (fromInt x + acc * b) g'
+         f (n-1) (fromIntegral x + acc * b) g'
 
 randomIvalDouble :: (RandomGen g, Fractional a) => (Double, Double) -> (Double -> a) -> g -> (a, g)
 randomIvalDouble (l,h) fromDouble rng