packages feed

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 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)