random-source-0.3.0.11: Generic basis for random number generators

Data.Random.Internal.Source

Synopsis

# Documentation

data Prim a where Source #

A Prompt GADT describing a request for a primitive random variate. Random variable definitions will request their entropy via these prompts, and entropy sources will satisfy those requests. The functions in Data.Random.Source.Internal.TH extend incomplete entropy-source definitions to complete ones, essentially defining a very flexible implementation-defaulting system.

Some possible future additions: PrimFloat :: Prim Float PrimInt :: Prim Int PrimPair :: Prim a -> Prim b -> Prim (a :*: b) PrimNormal :: Prim Double PrimChoice :: [(Double :*: a)] -> Prim a PrimBytes :: !Int -> Prim ByteString

Unfortunately, I cannot get Haddock to accept my comments about the data constructors, but hopefully they should be reasonably self-explanatory.

Constructors

 PrimWord8 :: Prim Word8 PrimWord16 :: Prim Word16 PrimWord32 :: Prim Word32 PrimWord64 :: Prim Word64 PrimDouble :: Prim Double PrimNByteInteger :: !Int -> Prim Integer
Instances
 Show (Prim a) Source # Instance detailsDefined in Data.Random.Source.Internal.Prim MethodsshowsPrec :: Int -> Prim a -> ShowS #show :: Prim a -> String #showList :: [Prim a] -> ShowS #

A typeclass for monads with a chosen source of entropy. For example, RVar is such a monad - the source from which it is (eventually) sampled is the only source from which a random variable is permitted to draw, so when directly requesting entropy for a random variable these functions are used.

Minimum implementation is either the internal getRandomPrim or all other functions. Additionally, this class's interface is subject to extension at any time, so it is very, very strongly recommended that the monadRandom Template Haskell function be used to implement this function rather than directly implementing it. That function takes care of choosing default implementations for any missing functions; as long as at least one function is implemented, it will derive sensible implementations of all others.

To use monadRandom, just wrap your instance declaration as follows (and enable the TemplateHaskell and GADTs language extensions):

$(monadRandom [d| instance MonadRandom FooM where getRandomDouble = return pi getRandomWord16 = return 4 {- etc... -} |]) Minimal complete definition Nothing Methods getRandomPrim :: Prim t -> m t Source # Generate a random value corresponding to the specified primitive. This is an internal interface; use at your own risk. It may change or disappear at any time. Generate a uniformly distributed random Word8 Generate a uniformly distributed random Word16 Generate a uniformly distributed random Word32 Generate a uniformly distributed random Word64 Generate a uniformly distributed random Double in the range 0 <= U < 1 Generate a uniformly distributed random Integer in the range 0 <= U < 256^n Instances  Source # Instance detailsDefined in Data.Random.Source.IO MethodsgetRandomPrim :: Prim t -> IO t Source # Monad m => MonadRandom (StateT PureMT m) Source # Instance detailsDefined in Data.Random.Source.PureMT MethodsgetRandomPrim :: Prim t -> StateT PureMT m t Source # Monad m => MonadRandom (StateT StdGen m) Source # Instance detailsDefined in Data.Random.Source.StdGen MethodsgetRandomPrim :: Prim t -> StateT StdGen m t Source # Monad m => MonadRandom (StateT PureMT m) Source # Instance detailsDefined in Data.Random.Source.PureMT MethodsgetRandomPrim :: Prim t -> StateT PureMT m t Source # Monad m => MonadRandom (StateT StdGen m) Source # Instance detailsDefined in Data.Random.Source.StdGen MethodsgetRandomPrim :: Prim t -> StateT StdGen m t Source # (PrimMonad m, s ~ PrimState m) => MonadRandom (ReaderT (Gen s) m) Source # Instance detailsDefined in Data.Random.Source.MWC MethodsgetRandomPrim :: Prim t -> ReaderT (Gen s) m t Source # (Monad m, Monoid w) => MonadRandom (RWST r w PureMT m) Source # Instance detailsDefined in Data.Random.Source.PureMT MethodsgetRandomPrim :: Prim t -> RWST r w PureMT m t Source # (Monad m, Monoid w) => MonadRandom (RWST r w StdGen m) Source # Instance detailsDefined in Data.Random.Source.StdGen MethodsgetRandomPrim :: Prim t -> RWST r w StdGen m t Source # (Monad m, Monoid w) => MonadRandom (RWST r w PureMT m) Source # Instance detailsDefined in Data.Random.Source.PureMT MethodsgetRandomPrim :: Prim t -> RWST r w PureMT m t Source # (Monad m, Monoid w) => MonadRandom (RWST r w StdGen m) Source # Instance detailsDefined in Data.Random.Source.StdGen MethodsgetRandomPrim :: Prim t -> RWST r w StdGen m t Source # class Monad m => RandomSource m s where Source # A source of entropy which can be used in the given monad. See also MonadRandom. Minimum implementation is either the internal getRandomPrimFrom or all other functions. Additionally, this class's interface is subject to extension at any time, so it is very, very strongly recommended that the randomSource Template Haskell function be used to implement this function rather than directly implementing it. That function takes care of choosing default implementations for any missing functions; as long as at least one function is implemented, it will derive sensible implementations of all others. To use randomSource, just wrap your instance declaration as follows (and enable the TemplateHaskell, MultiParamTypeClasses and GADTs language extensions, as well as any others required by your instances, such as FlexibleInstances): $(randomSource [d|
instance RandomSource FooM Bar where
{- at least one RandomSource function... -}
|])

Minimal complete definition

Nothing

Methods

getRandomPrimFrom :: s -> Prim t -> m t Source #

Generate a random value corresponding to the specified primitive.

This is an internal interface; use at your own risk. It may change or disappear at any time.

getRandomWord8From :: s -> m Word8 Source #

Generate a uniformly distributed random Word8

getRandomWord16From :: s -> m Word16 Source #

Generate a uniformly distributed random Word16

getRandomWord32From :: s -> m Word32 Source #

Generate a uniformly distributed random Word32

getRandomWord64From :: s -> m Word64 Source #

Generate a uniformly distributed random Word64

getRandomDoubleFrom :: s -> m Double Source #

Generate a uniformly distributed random Double in the range 0 <= U < 1

getRandomNByteIntegerFrom :: s -> Int -> m Integer Source #

Generate a uniformly distributed random Integer in the range 0 <= U < 256^n

Instances
This type provides a way to define a RandomSource for a monad without actually having to declare an instance.