@@ -158,7 +158,7 @@ module System.Random.MWC
158158#include "MachDeps.h"
159159#endif
160160
161- import Control.Monad (ap , liftM , unless )
161+ import Control.Monad (unless )
162162import Control.Monad.Primitive (PrimMonad , PrimBase , PrimState , unsafePrimToIO , stToPrim )
163163import Control.Monad.ST (ST ,runST )
164164import Data.Bits ((.&.) , (.|.) , shiftL , shiftR , xor )
@@ -310,24 +310,24 @@ instance Variate Word where
310310 {-# INLINE uniformR #-}
311311
312312instance (Variate a , Variate b ) => Variate (a ,b ) where
313- uniform g = (,) `liftM` uniform g `ap` uniform g
314- uniformR ((x1,y1),(x2,y2)) g = (,) `liftM` uniformR (x1,x2) g `ap` uniformR (y1,y2) g
313+ uniform g = (,) <$> uniform g <*> uniform g
314+ uniformR ((x1,y1),(x2,y2)) g = (,) <$> uniformR (x1,x2) g <*> uniformR (y1,y2) g
315315 {-# INLINE uniform #-}
316316 {-# INLINE uniformR #-}
317317
318318instance (Variate a , Variate b , Variate c ) => Variate (a ,b ,c ) where
319- uniform g = (,,) `liftM` uniform g `ap` uniform g `ap` uniform g
319+ uniform g = (,,) <$> uniform g <*> uniform g <*> uniform g
320320 uniformR ((x1,y1,z1),(x2,y2,z2)) g =
321- (,,) `liftM` uniformR (x1,x2) g `ap` uniformR (y1,y2) g `ap` uniformR (z1,z2) g
321+ (,,) <$> uniformR (x1,x2) g <*> uniformR (y1,y2) g <*> uniformR (z1,z2) g
322322 {-# INLINE uniform #-}
323323 {-# INLINE uniformR #-}
324324
325325instance (Variate a , Variate b , Variate c , Variate d ) => Variate (a ,b ,c ,d ) where
326- uniform g = (,,,) `liftM` uniform g `ap` uniform g `ap` uniform g
327- `ap` uniform g
326+ uniform g = (,,,) <$> uniform g <*> uniform g <*> uniform g
327+ <*> uniform g
328328 uniformR ((x1,y1,z1,t1),(x2,y2,z2,t2)) g =
329- (,,,) `liftM` uniformR (x1,x2) g `ap` uniformR (y1,y2) g `ap`
330- uniformR (z1,z2) g `ap` uniformR (t1,t2) g
329+ (,,,) <$> uniformR (x1,x2) g <*> uniformR (y1,y2) g <*>
330+ uniformR (z1,z2) g <*> uniformR (t1,t2) g
331331 {-# INLINE uniform #-}
332332 {-# INLINE uniformR #-}
333333
@@ -496,12 +496,12 @@ toSeed v = Seed $ I.create $ do { Gen q <- initialize v; return q }
496496
497497-- | Save the state of a 'Gen', for later use by 'restore'.
498498save :: PrimMonad m => Gen (PrimState m ) -> m Seed
499- save (Gen q) = Seed `liftM` G. freeze q
499+ save (Gen q) = Seed <$> G. freeze q
500500{-# INLINE save #-}
501501
502502-- | Create a new 'Gen' that mirrors the state of a saved 'Seed'.
503503restore :: PrimMonad m => Seed -> m (Gen (PrimState m ))
504- restore (Seed s) = Gen `liftM` G. thaw s
504+ restore (Seed s) = Gen <$> G. thaw s
505505{-# INLINE restore #-}
506506
507507
@@ -591,9 +591,9 @@ aa = 1540315826
591591uniformWord32 :: PrimMonad m => Gen (PrimState m ) -> m Word32
592592-- NOTE [Carry value]
593593uniformWord32 (Gen q) = do
594- i <- nextIndex `liftM` M. unsafeRead q ioff
595- c <- fromIntegral `liftM` M. unsafeRead q coff
596- qi <- fromIntegral `liftM` M. unsafeRead q i
594+ i <- nextIndex <$> M. unsafeRead q ioff
595+ c <- fromIntegral <$> M. unsafeRead q coff
596+ qi <- fromIntegral <$> M. unsafeRead q i
597597 let t = aa * qi + c
598598 c' = fromIntegral (t `shiftR` 32 )
599599 x = fromIntegral t + c'
@@ -613,11 +613,11 @@ uniform1 f gen = do
613613
614614uniform2 :: PrimMonad m => (Word32 -> Word32 -> a ) -> Gen (PrimState m ) -> m a
615615uniform2 f (Gen q) = do
616- i <- nextIndex `liftM` M. unsafeRead q ioff
616+ i <- nextIndex <$> M. unsafeRead q ioff
617617 let j = nextIndex i
618- c <- fromIntegral `liftM` M. unsafeRead q coff
619- qi <- fromIntegral `liftM` M. unsafeRead q i
620- qj <- fromIntegral `liftM` M. unsafeRead q j
618+ c <- fromIntegral <$> M. unsafeRead q coff
619+ qi <- fromIntegral <$> M. unsafeRead q i
620+ qj <- fromIntegral <$> M. unsafeRead q j
621621 let t = aa * qi + c
622622 c' = fromIntegral (t `shiftR` 32 )
623623 x = fromIntegral t + c'
0 commit comments