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 +2/−2
- System/Random/MWC/Distributions/Monad.hs +6/−6
- System/Random/MWC/Monad.hs +22/−17
- mwc-random-monad.cabal +6/−5
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