packages feed

mwc-random-monad 0.4 → 0.5

raw patch · 2 files changed

+37/−23 lines, 2 filesdep +transformersPVP ok

version bump matches the API change (PVP)

Dependencies added: transformers

API changes (from Hackage documentation)

- System.Random.MWC.Monad: instance PrimMonad m => Applicative (Rand m)
- System.Random.MWC.Monad: instance PrimMonad m => Functor (Rand m)
- System.Random.MWC.Monad: instance PrimMonad m => Monad (Rand m)
- System.Random.MWC.Monad: liftR :: PrimMonad m => m a -> Rand m a
+ System.Random.MWC.Monad: instance Monad m => Applicative (Rand m)
+ System.Random.MWC.Monad: instance Monad m => Functor (Rand m)
+ System.Random.MWC.Monad: instance Monad m => Monad (Rand m)
+ System.Random.MWC.Monad: instance MonadIO m => MonadIO (Rand m)
+ System.Random.MWC.Monad: instance MonadTrans Rand

Files

System/Random/MWC/Monad.hs view
@@ -15,7 +15,6 @@     -- * Random monad     Rand   , toRand-  , liftR     -- ** Type syhnonims   , RandIO   , asRandIO@@ -38,9 +37,11 @@   ) where  import Control.Applicative-import Control.Monad           (ap)-import Control.Monad.ST        (ST)-import Control.Monad.Primitive (PrimMonad, PrimState)+import Control.Monad             (ap)+import Control.Monad.Trans.Class (MonadTrans(..))+import Control.Monad.IO.Class    (MonadIO(..))+import Control.Monad.ST          (ST)+import Control.Monad.Primitive   (PrimMonad, PrimState)  import Data.Word               (Word32) import qualified Data.Vector.Generic as G@@ -56,11 +57,32 @@   runRand :: Gen (PrimState m) -> m a   } --- | Lift monadic action into 'Rand' monad-liftR :: PrimMonad m => m a -> Rand m a-liftR m = Rand $ const m-{-# INLINE liftR #-}+instance (Monad m) => Functor (Rand m) where+  fmap f (Rand rnd) = Rand $ \g -> (return . f) =<< (rnd g)+  {-# INLINE fmap #-} +instance (Monad m) => Monad (Rand m) where+  return           = Rand . const . return+  (Rand rnd) >>= f = Rand $ \g -> (\x -> runRand (f x) g) =<< rnd g+  {-# INLINE return #-}+  {-# INLINE (>>=)  #-}++instance (Monad m) => Applicative (Rand m) where+  pure  = return+  (<*>) = ap+  {-# INLINE pure  #-}+  {-# INLINE (<*>) #-}++instance MonadTrans Rand where+  lift = Rand . const+  {-# INLINE lift #-}++instance MonadIO m => MonadIO (Rand m) where+  liftIO = lift . liftIO+  {-# INLINE liftIO #-}+++ -- | Type synonim for ST-based Rand monad type RandST s a = Rand (ST s) a @@ -77,6 +99,10 @@ asRandIO = id {-# INLINE asRandIO #-} +++----------------------------------------------------------------+ -- | Run monad using fixed seed runWithCreate :: PrimMonad m => Rand m a -> m a runWithCreate m = runRand m =<< MWC.create@@ -97,22 +123,8 @@ runWithSystemRandom = MWC.withSystemRandom . runRand {-# INLINE runWithSystemRandom #-} -instance PrimMonad m => Functor (Rand m) where-  fmap f (Rand rnd) = Rand $ \g -> (return . f) =<< (rnd g)-  {-# INLINE fmap #-} -instance PrimMonad m => Monad (Rand m) where-  return           = Rand . const . return-  (Rand rnd) >>= f = Rand $ \g -> (\x -> runRand (f x) g) =<< rnd g-  {-# INLINE return #-}-  {-# INLINE (>>=)  #-} -instance (PrimMonad m) => Applicative (Rand m) where-  pure  = return-  (<*>) = ap-  {-# INLINE pure  #-}-  {-# INLINE (<*>) #-}- ----------------------------------------------------------------  -- | Convert function to Rand monad@@ -129,6 +141,7 @@ uniformR :: (PrimMonad m, Variate a) => (a,a) -> Rand m a uniformR rng = Rand $ \g -> MWC.uniformR rng g {-# INLINE uniformR #-}+   ----------------------------------------------------------------
mwc-random-monad.cabal view
@@ -1,5 +1,5 @@ Name:                mwc-random-monad-Version:             0.4+Version:             0.5 License:             BSD3 License-file:        LICENSE Author:              Alexey Khudyakov <alexey.skladnoy@gmail.com>@@ -15,6 +15,7 @@ Library   build-depends:     base >= 3 && < 5,+    transformers,     primitive,     vector >= 0.7,     mwc-random >= 0.11