MonadRandom 0.3.0.1 → 0.3.0.2
raw patch · 3 files changed
+21/−24 lines, 3 filesdep +transformers-compatPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
Dependencies added: transformers-compat
API changes (from Hackage documentation)
+ Control.Monad.Random: instance (Error e, MonadRandom m) => MonadRandom (ErrorT e m)
+ Control.Monad.Random: instance (Error e, MonadSplit g m) => MonadSplit g (ErrorT e m)
Files
- CHANGES.markdown +5/−0
- Control/Monad/Random.hs +14/−22
- MonadRandom.cabal +2/−2
CHANGES.markdown view
@@ -1,3 +1,8 @@+0.3.0.2 (30 March 2015)+-----------------------++ - Add transformers-compat to allow building with newer mtl+ 0.3.0.1 (24 November 2014) --------------------------
Control/Monad/Random.hs view
@@ -50,11 +50,7 @@ import Control.Arrow import Control.Monad () import Control.Monad.Cont-#if MIN_VERSION_transformers(0,4,0)-import Control.Monad.Except-#else import Control.Monad.Error-#endif import Control.Monad.Identity import Control.Monad.Random.Class import Control.Monad.Reader@@ -64,6 +60,7 @@ import qualified Control.Monad.State.Lazy as SL import qualified Control.Monad.State.Strict as SS import Control.Monad.Trans ()+import Control.Monad.Trans.Except import Control.Monad.Trans.Identity import Control.Monad.Trans.Maybe import Control.Monad.Writer.Class@@ -81,12 +78,6 @@ pure = return (<*>) = ap -liftState :: (MonadState s m) => (s -> (a,s)) -> m a-liftState t = do v <- get- let (x, v') = t v- put v'- return x- -- | Lift arbitrary action to RandT liftRandT :: (Monad m, RandomGen g) => (g -> m (a, g)) -- ^ action returning value and new generator state@@ -97,17 +88,17 @@ liftRand :: (RandomGen g) => (g -> (a, g)) -- ^ action returning value and new generator state -> Rand g a-liftRand = RandT . liftState+liftRand = RandT . state instance (Monad m, RandomGen g) => MonadRandom (RandT g m) where- getRandom = RandT . liftState $ random- getRandoms = RandT . liftState $ first randoms . split- getRandomR (x,y) = RandT . liftState $ randomR (x,y)- getRandomRs (x,y) = RandT . liftState $+ getRandom = RandT . state $ random+ getRandoms = RandT . state $ first randoms . split+ getRandomR (x,y) = RandT . state $ randomR (x,y)+ getRandomRs (x,y) = RandT . state $ first (randomRs (x,y)) . split instance (Monad m, RandomGen g) => MonadSplit g (RandT g m) where- getSplit = RandT . liftState $ split+ getSplit = RandT . state $ split -- | Evaluate a RandT computation using the generator @g@. Note that the -- generator @g@ is not returned, so there's no way to recover the@@ -203,11 +194,13 @@ getRandoms = lift getRandoms getRandomRs = lift . getRandomRs -#if MIN_VERSION_transformers(0,4,0) instance (MonadRandom m) => MonadRandom (ExceptT e m) where-#else+ getRandom = lift getRandom+ getRandomR = lift . getRandomR+ getRandoms = lift getRandoms+ getRandomRs = lift . getRandomRs+ instance (Error e, MonadRandom m) => MonadRandom (ErrorT e m) where-#endif getRandom = lift getRandom getRandomR = lift . getRandomR getRandoms = lift getRandoms@@ -249,11 +242,10 @@ instance (MonadSplit g m, Monoid w) => MonadSplit g (RWSS.RWST r w s m) where getSplit = lift getSplit -#if MIN_VERSION_transformers(0,4,0) instance (MonadSplit g m) => MonadSplit g (ExceptT e m) where-#else+ getSplit = lift getSplit+ instance (Error e, MonadSplit g m) => MonadSplit g (ErrorT e m) where-#endif getSplit = lift getSplit instance (MonadSplit g m) => MonadSplit g (MaybeT m) where
MonadRandom.cabal view
@@ -1,5 +1,5 @@ name: MonadRandom-version: 0.3.0.1+version: 0.3.0.2 synopsis: Random-number generation monad. description: Support for computations which consume random values. license: OtherLicense@@ -17,6 +17,6 @@ library exposed-modules: Control.Monad.Random, Control.Monad.Random.Class- build-depends: base >= 2 && < 5, transformers >= 0.3 && < 0.5, mtl, random+ build-depends: base >= 2 && < 5, transformers >= 0.3 && < 0.5, transformers-compat == 0.4.*, mtl, random ghc-options: -Wall default-language: Haskell2010