packages feed

mwc-random-monad 0.5 → 0.6

raw patch · 4 files changed

+36/−30 lines, 4 filesdep +monad-primitivedep ~transformersPVP ok

version bump matches the API change (PVP)

Dependencies added: monad-primitive

Dependency ranges changed: transformers

API changes (from Hackage documentation)

+ System.Random.MWC.Monad: instance MonadPrim m => MonadPrim (Rand m)
- System.Random.MWC.CondensedTable.Monad: genFromTable :: (PrimMonad m, Vector v a) => CondensedTable v a -> Rand m a
+ System.Random.MWC.CondensedTable.Monad: genFromTable :: (MonadPrim m, Vector v a) => CondensedTable v a -> Rand m a
- System.Random.MWC.Distributions.Monad: chiSquare :: PrimMonad m => Int -> Rand m Double
+ System.Random.MWC.Distributions.Monad: chiSquare :: MonadPrim m => Int -> Rand m Double
- System.Random.MWC.Distributions.Monad: exponential :: PrimMonad m => Double -> Rand m Double
+ System.Random.MWC.Distributions.Monad: exponential :: MonadPrim m => Double -> Rand m Double
- System.Random.MWC.Distributions.Monad: gamma :: PrimMonad m => Double -> Double -> Rand m Double
+ System.Random.MWC.Distributions.Monad: gamma :: MonadPrim m => Double -> Double -> Rand m Double
- System.Random.MWC.Distributions.Monad: normal :: PrimMonad m => Double -> Double -> Rand m Double
+ System.Random.MWC.Distributions.Monad: normal :: MonadPrim m => Double -> Double -> Rand m Double
- System.Random.MWC.Distributions.Monad: standard :: PrimMonad m => Rand m Double
+ System.Random.MWC.Distributions.Monad: standard :: MonadPrim m => Rand m Double
- System.Random.MWC.Monad: runRand :: Rand m a -> Gen (PrimState m) -> m a
+ System.Random.MWC.Monad: runRand :: Rand m a -> Gen (PrimState (BasePrimMonad m)) -> m a
- System.Random.MWC.Monad: runWithCreate :: PrimMonad m => Rand m a -> m a
+ System.Random.MWC.Monad: runWithCreate :: MonadPrim m => Rand m a -> m a
- System.Random.MWC.Monad: runWithSeed :: PrimMonad m => Seed -> Rand m a -> m a
+ System.Random.MWC.Monad: runWithSeed :: MonadPrim m => Seed -> Rand m a -> m a
- System.Random.MWC.Monad: runWithSystemRandom :: PrimMonad m => Rand m a -> IO a
+ System.Random.MWC.Monad: runWithSystemRandom :: (MonadPrim m, BasePrimMonad m ~ m) => Rand m a -> IO a
- System.Random.MWC.Monad: runWithVector :: (Vector v Word32, PrimMonad m) => Rand m a -> v Word32 -> m a
+ System.Random.MWC.Monad: runWithVector :: (Vector v Word32, MonadPrim m) => Rand m a -> v Word32 -> m a
- System.Random.MWC.Monad: save :: PrimMonad m => Rand m Seed
+ System.Random.MWC.Monad: save :: MonadPrim m => Rand m Seed
- System.Random.MWC.Monad: toRand :: PrimMonad m => (Gen (PrimState m) -> m a) -> Rand m a
+ System.Random.MWC.Monad: toRand :: MonadPrim m => (Gen (PrimState (BasePrimMonad m)) -> BasePrimMonad m a) -> Rand m a
- System.Random.MWC.Monad: uniform :: (PrimMonad m, Variate a) => Rand m a
+ System.Random.MWC.Monad: uniform :: (MonadPrim m, Variate a) => Rand m a
- System.Random.MWC.Monad: uniformR :: (PrimMonad m, Variate a) => (a, a) -> Rand m a
+ System.Random.MWC.Monad: uniformR :: (MonadPrim m, Variate a) => (a, a) -> Rand m a

Files

System/Random/MWC/CondensedTable/Monad.hs view
@@ -23,12 +23,12 @@   , MWC.tableBinomial   ) where -import Control.Monad.Primitive         (PrimMonad)+import Control.Monad.Primitive.Class (MonadPrim) import qualified Data.Vector.Generic as G import System.Random.MWC.Monad import qualified System.Random.MWC.CondensedTable as MWC  -genFromTable :: (PrimMonad m, G.Vector v a) => MWC.CondensedTable v a -> Rand m a+genFromTable :: (MonadPrim m, G.Vector v a) => MWC.CondensedTable v a -> Rand m a genFromTable tbl = toRand $ \g -> MWC.genFromTable tbl g {-# INLINE genFromTable #-}
System/Random/MWC/Distributions/Monad.hs view
@@ -16,7 +16,7 @@   , chiSquare   ) where -import Control.Monad.Primitive (PrimMonad)+import Control.Monad.Primitive.Class (MonadPrim(..))  import qualified System.Random.MWC.Distributions as MWC import System.Random.MWC.Monad@@ -24,12 +24,12 @@   -- | Normally distributed variables with mean 0 and 1 standard deviation-standard :: PrimMonad m => Rand m Double+standard :: MonadPrim m => Rand m Double standard = toRand $ \g -> MWC.standard g {-# INLINE normal #-}  -- | Normally distributed variable-normal :: PrimMonad m => +normal :: MonadPrim m =>           Double                -- ^ Mean        -> Double                -- ^ Standard deviation        -> Rand m Double@@ -37,14 +37,14 @@ {-# INLINE standard #-}  -- | Generate exponentially distributed random variate. -exponential :: PrimMonad m =>+exponential :: MonadPrim m =>                Double           -- ^ Scale parameter             -> Rand m Double exponential x = toRand $ \g -> MWC.exponential x g {-# INLINE exponential #-}  -- | Random variate generator for gamma distribution.-gamma :: PrimMonad m+gamma :: MonadPrim m       => Double                 -- ^ Shape parameter       -> Double                 -- ^ Scale parameter       -> Rand m Double@@ -52,7 +52,7 @@ {-# INLINE gamma #-}  -- | Random variate generator for chi square distribution.-chiSquare :: PrimMonad m+chiSquare :: MonadPrim m           => Int                -- ^ Number of degrees of freedom           -> Rand m Double chiSquare n = toRand $ \g -> MWC.chiSquare n g
System/Random/MWC/Monad.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE TypeFamilies     #-} -- | -- Module    : System.Random.MWC.Monad -- Copyright : (c) 2010-2012 Aleksey Khudyakov@@ -42,6 +43,7 @@ import Control.Monad.IO.Class    (MonadIO(..)) import Control.Monad.ST          (ST) import Control.Monad.Primitive   (PrimMonad, PrimState)+import Control.Monad.Primitive.Class (MonadPrim(..))  import Data.Word               (Word32) import qualified Data.Vector.Generic as G@@ -54,7 +56,7 @@ -- | Random monad for mwc-random package newtype Rand m a = Rand {   -- | Run random monad-  runRand :: Gen (PrimState m) -> m a+  runRand :: Gen (PrimState (BasePrimMonad m)) -> m a   }  instance (Monad m) => Functor (Rand m) where@@ -81,7 +83,10 @@   liftIO = lift . liftIO   {-# INLINE liftIO #-} -+instance MonadPrim m => MonadPrim (Rand m) where+  type BasePrimMonad (Rand m) = BasePrimMonad m+  liftPrim = lift . liftPrim+  {-# INLINE liftPrim #-}  -- | Type synonim for ST-based Rand monad type RandST s a = Rand (ST s) a@@ -104,22 +109,22 @@ ----------------------------------------------------------------  -- | Run monad using fixed seed-runWithCreate :: PrimMonad m => Rand m a -> m a-runWithCreate m = runRand m =<< MWC.create+runWithCreate :: MonadPrim m => Rand m a -> m a+runWithCreate m = runRand m =<< liftPrim MWC.create {-# INLINE runWithCreate #-}  -- | By creating seed from vector of values-runWithVector :: (G.Vector v Word32, PrimMonad m) => Rand m a -> v Word32 -> m a-runWithVector m v = runRand m =<< MWC.initialize v+runWithVector :: (G.Vector v Word32, MonadPrim m) => Rand m a -> v Word32 -> m a+runWithVector m v = runRand m =<< liftPrim (MWC.initialize v) {-# INLINE runWithVector #-}  -- | Run monad using seed-runWithSeed :: PrimMonad m => Seed -> Rand m a -> m a-runWithSeed seed m = runRand m =<< MWC.restore seed+runWithSeed :: MonadPrim m => Seed -> Rand m a -> m a+runWithSeed seed m = runRand m =<< liftPrim (MWC.restore seed) {-# INLINE runWithSeed #-}  -- | Run monad using system random-runWithSystemRandom :: PrimMonad m => Rand m a -> IO a+runWithSystemRandom :: (MonadPrim m, BasePrimMonad m ~ m) => Rand m a -> IO a runWithSystemRandom = MWC.withSystemRandom . runRand {-# INLINE runWithSystemRandom #-} @@ -128,18 +133,18 @@ ----------------------------------------------------------------  -- | Convert function to Rand monad-toRand :: PrimMonad m => (Gen (PrimState m) -> m a) -> Rand m a-toRand = Rand+toRand :: MonadPrim m => (Gen (PrimState (BasePrimMonad m)) -> BasePrimMonad m a) -> Rand m a+toRand generator = Rand $ \g -> liftPrim (generator g) {-# INLINE toRand #-}  -- | Uniformly distributed values-uniform :: (PrimMonad m, Variate a) => Rand m a-uniform = Rand $ \g -> MWC.uniform g+uniform :: (MonadPrim m, Variate a) => Rand m a+uniform = toRand $ \g -> MWC.uniform g {-# INLINE uniform #-}  -- | Uniformly distributed values in range-uniformR :: (PrimMonad m, Variate a) => (a,a) -> Rand m a-uniformR rng = Rand $ \g -> MWC.uniformR rng g+uniformR :: (MonadPrim m, Variate a) => (a,a) -> Rand m a+uniformR rng = toRand $ \g -> MWC.uniformR rng g {-# INLINE uniformR #-}  @@ -147,5 +152,5 @@ ----------------------------------------------------------------  -- | Save current seed for future reuse-save :: PrimMonad m => Rand m Seed-save = Rand MWC.save+save :: MonadPrim m => Rand m Seed+save = Rand $ liftPrim . MWC.save
mwc-random-monad.cabal view
@@ -1,5 +1,5 @@ Name:                mwc-random-monad-Version:             0.5+Version:             0.6 License:             BSD3 License-file:        LICENSE Author:              Alexey Khudyakov <alexey.skladnoy@gmail.com>@@ -14,16 +14,17 @@  Library   build-depends:-    base >= 3 && < 5,-    transformers,+    base         >= 3 && < 5,+    transformers >= 0.3,     primitive,-    vector >= 0.7,+    monad-primitive,+    vector     >= 0.7,     mwc-random >= 0.11   Exposed-modules:     System.Random.MWC.Monad     System.Random.MWC.Distributions.Monad     System.Random.MWC.CondensedTable.Monad-  Ghc-options:       -O2 -Wall+  Ghc-options:       -O2 -Wall -fsimpl-tick-factor=500   Ghc-prof-options:  -auto-all  source-repository head