random-fu 0.2.7.6 → 0.2.7.7
raw patch · 4 files changed
+40/−36 lines, 4 filesdep ~randomnew-uploader
Dependency ranges changed: random
Files
- changelog.md +4/−0
- random-fu.cabal +9/−9
- src/Data/Random.hs +23/−22
- src/Data/Random/Sample.hs +4/−5
changelog.md view
@@ -1,3 +1,7 @@+* Changes in 0.2.7.7: Update to random-1.2. Revert 0.2.7.6 changes (which added an extra constraint to `Data.Random.Sample.sampleState` and `Data.Random.Sample.sampleStateT`).++* Changes in 0.2.7.4: Compatibility with ghc 8.8.+ * Changes in 0.2.7.3: Remove dependence on log-domain. Raise lower bound for base to 4.9. * Changes in 0.2.7.1: Add PDF instance for Poisson.
random-fu.cabal view
@@ -1,5 +1,5 @@ name: random-fu-version: 0.2.7.6+version: 0.2.7.7 stability: provisional cabal-version: >= 1.10@@ -12,21 +12,21 @@ category: Math synopsis: Random number generation-description: Random number generation based on modeling random+description: Random number generation based on modeling random variables in two complementary ways: first, by the parameters of standard mathematical distributions and, second, by an abstract type ('RVar') which can be composed and manipulated monadically and sampled in either monadic or \"pure\" styles. .- The primary purpose of this library is to support+ The primary purpose of this library is to support defining and sampling a wide variety of high quality random variables. Quality is prioritized over speed, but performance is an important goal too. .- In my testing, I have found it capable of speed+ In my testing, I have found it capable of speed comparable to other Haskell libraries, but still- a fair bit slower than straight C implementations of+ a fair bit slower than straight C implementations of the same algorithms. tested-with: GHC == 7.10.3@@ -83,16 +83,16 @@ else cpp-options: -Dold_Fixed build-depends: base >= 4 && <4.2-+ if flag(mtl2) build-depends: mtl == 2.* cpp-options: -DMTL2 else build-depends: mtl == 1.*-+ build-depends: math-functions, monad-loops >= 0.3.0.1,- random >= 1.2.0,+ random >= 1.2 && < 1.3, random-shuffle, random-source == 0.3.*, rvar == 0.2.*,@@ -101,7 +101,7 @@ transformers, vector >= 0.7, erf-+ if impl(ghc == 7.2.1) -- Doesn't work under GHC 7.2.1 due to -- http://hackage.haskell.org/trac/ghc/ticket/5410
src/Data/Random.hs view
@@ -1,39 +1,39 @@ -- |Flexible modeling and sampling of random variables. ----- The central abstraction in this library is the concept of a random--- variable. It is not fully formalized in the standard measure-theoretic--- language, but rather is informally defined as a \"thing you can get random--- values out of\". Different random variables may have different types of+-- The central abstraction in this library is the concept of a random +-- variable. It is not fully formalized in the standard measure-theoretic +-- language, but rather is informally defined as a \"thing you can get random +-- values out of\". Different random variables may have different types of -- values they can return or the same types but different probabilities for -- each value they can return. The random values you get out of them are -- traditionally called \"random variates\".------ Most imperative-language random number libraries are all about obtaining--- and manipulating random variates. This one is about defining, manipulating--- and sampling random variables. Computationally, the distinction is small--- and mostly just a matter of perspective, but from a program design+-- +-- Most imperative-language random number libraries are all about obtaining +-- and manipulating random variates. This one is about defining, manipulating +-- and sampling random variables. Computationally, the distinction is small +-- and mostly just a matter of perspective, but from a program design -- perspective it provides both a powerfully composable abstraction and a -- very useful separation of concerns.---+-- -- Abstract random variables as implemented by 'RVar' are composable. They can -- be defined in a monadic / \"imperative\" style that amounts to manipulating -- variates, but with strict type-level isolation. Concrete random variables -- are also provided, but they do not compose as generically. The 'Distribution'--- type class allows concrete random variables to \"forget\" their concreteness--- so that they can be composed. For examples of both, see the documentation--- for 'RVar' and 'Distribution', as well as the code for any of the concrete+-- type class allows concrete random variables to \"forget\" their concreteness +-- so that they can be composed. For examples of both, see the documentation +-- for 'RVar' and 'Distribution', as well as the code for any of the concrete -- distributions such as 'Uniform', 'Gamma', etc.---+-- -- Both abstract and concrete random variables can be sampled (despite the -- types GHCi may list for the functions) by the functions in "Data.Random.Sample".---+-- -- Random variable sampling is done with regard to a generic basis of primitive--- random variables defined in "Data.Random.Internal.Primitives". This basis+-- random variables defined in "Data.Random.Internal.Primitives". This basis -- is very low-level and the actual set of primitives is still fairly experimental, -- which is why it is in the \"Internal\" sub-heirarchy. User-defined variables -- should use the existing high-level variables such as 'Uniform' and 'Normal' -- rather than these basis variables. "Data.Random.Source" defines classes for--- entropy sources that provide implementations of these primitive variables.+-- entropy sources that provide implementations of these primitive variables. -- Several implementations are available in the Data.Random.Source.* modules. module Data.Random ( -- * Random variables@@ -43,23 +43,23 @@ -- ** Concrete ('Distribution') Distribution(..), CDF(..), PDF(..),-+ -- * Sampling random variables Sampleable(..), sample, sampleState, sampleStateT,-+ -- * A few very common distributions Uniform(..), uniform, uniformT, StdUniform(..), stdUniform, stdUniformT, Normal(..), normal, stdNormal, normalT, stdNormalT, Gamma(..), gamma, gammaT,-+ -- * Entropy Sources MonadRandom, RandomSource, StdRandom(..),-+ -- * Useful list-based operations randomElement, shuffle, shuffleN, shuffleNofM-+ ) where import Data.Random.Sample@@ -67,6 +67,7 @@ import Data.Random.Source.IO () import Data.Random.Source.MWC () import Data.Random.Source.StdGen ()+import Data.Random.Source.PureMT () import Data.Random.Source.Std import Data.Random.Distribution import Data.Random.Distribution.Gamma
src/Data/Random/Sample.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE MultiParamTypeClasses,- FlexibleInstances, FlexibleContexts,+ FlexibleInstances, FlexibleContexts, IncoherentInstances #-} @@ -8,13 +8,12 @@ module Data.Random.Sample where -import Control.Monad.State+import Control.Monad.State import Data.Random.Distribution import Data.Random.Lift import Data.Random.RVar import Data.Random.Source import Data.Random.Source.Std-import System.Random (RandomGen) -- |A typeclass allowing 'Distribution's and 'RVar's to be sampled. Both may -- also be sampled via 'runRVar' or 'runRVarT', but I find it psychologically@@ -38,10 +37,10 @@ -- |Sample a random variable in a \"functional\" style. Typical instantiations -- of @s@ are @System.Random.StdGen@ or @System.Random.Mersenne.Pure64.PureMT@.-sampleState :: (RandomGen s, Sampleable d (State s) t, MonadRandom (State s)) => d t -> s -> (t, s)+sampleState :: (Sampleable d (State s) t, MonadRandom (State s)) => d t -> s -> (t, s) sampleState thing = runState (sample thing) -- |Sample a random variable in a \"semi-functional\" style. Typical instantiations -- of @s@ are @System.Random.StdGen@ or @System.Random.Mersenne.Pure64.PureMT@.-sampleStateT :: (RandomGen s, Sampleable d (StateT s m) t, MonadRandom (StateT s m)) => d t -> s -> m (t, s)+sampleStateT :: (Sampleable d (StateT s m) t, MonadRandom (StateT s m)) => d t -> s -> m (t, s) sampleStateT thing = runStateT (sample thing)