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 +35/−22
- mwc-random-monad.cabal +2/−1
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