generic-random-1.0.0.0: Generic random generators

Safe HaskellNone
LanguageHaskell2010

Generic.Random

Contents

Description

Synopsis

Arbitrary implementations

genericArbitrary Source #

Arguments

:: (Generic a, GA Unsized (Rep a)) 
=> Weights a

List of weights for every constructor

-> Gen a 

Pick a constructor with a given distribution, and fill its fields with recursive calls to arbitrary.

Example

genericArbitrary (2 % 3 % 5 % ()) :: Gen a

Picks the first constructor with probability 2/10, the second with probability 3/10, the third with probability 5/10.

genericArbitraryU :: (Generic a, GA Unsized (Rep a), UniformWeight_ (Rep a)) => Gen a Source #

Pick every constructor with equal probability. Equivalent to genericArbitrary uniform.

genericArbitraryU :: Gen a

genericArbitrarySingle :: (Generic a, GA Unsized (Rep a), Weights_ (Rep a) ~ L c0) => Gen a Source #

arbitrary for types with one constructor. Equivalent to genericArbitraryU, with a stricter type.

genericArbitrarySingle :: Gen a

genericArbitrary' Source #

Arguments

:: (Generic a, GA Sized (Rep a), BaseCase a) 
=> Weights a

List of weights for every constructor

-> Gen a 

Decrease size to ensure termination for recursive types, looking for base cases once the size reaches 0.

genericArbitrary' (17 % 19 % 23 % ()) :: Gen a

genericArbitraryU' :: (Generic a, GA Sized (Rep a), BaseCase a, UniformWeight_ (Rep a)) => Gen a Source #

Equivalent to genericArbitrary' uniform.

genericArbitraryU :: Gen a

genericArbitraryRec Source #

Arguments

:: (Generic a, GA Sized (Rep a)) 
=> Weights a

List of weights for every constructor

-> Gen a 

Decrease size at every recursive call, but don't do anything different at size 0.

genericArbitraryRec (7 % 11 % 13 % ()) :: Gen a

Specifying finite distributions

data Weights a Source #

Trees of weights assigned to constructors of type a, rescaled to obtain a probability distribution.

Two ways of constructing them.

(x1 % x2 % ... % xn % ()) :: Weights a
uniform :: Weights a

Using (%), there must be exactly as many weights as there are constructors.

uniform is equivalent to (1 % ... % 1 % ()) (automatically fills out the right number of 1s).

Instances

data W c Source #

Type of a single weight, tagged with the name of the associated constructor for additional compile-time checking.

((9 :: W "Leaf") % (8 :: W "Node") % ())

Instances

Num (W c) Source # 

Methods

(+) :: W c -> W c -> W c #

(-) :: W c -> W c -> W c #

(*) :: W c -> W c -> W c #

negate :: W c -> W c #

abs :: W c -> W c #

signum :: W c -> W c #

fromInteger :: Integer -> W c #

(%) :: WeightBuilder' w => W (First' w) -> Prec' w -> w Source #

A binary constructor for building up trees of weights.

uniform :: UniformWeight_ (Rep a) => Weights a Source #

Uniform distribution.

Base cases for recursive types

withBaseCase :: Gen a -> Gen a -> Gen a Source #

Run the first generator if the size is positive. Run the second if the size is zero.

defaultGen `withBaseCase` baseCaseGen

class BaseCase a where Source #

Custom instances can override the default behavior.

Minimal complete definition

baseCase

Methods

baseCase :: Gen a Source #

Generator of base cases.

Instances

BaseCaseSearching Nat a 0 => BaseCase a Source #

Overlappable

Methods

baseCase :: Gen a Source #

weights :: (Weights_ (Rep a), Int, ()) -> Weights a Source #

Deprecated: Can be omitted

A smart constructor to specify a custom distribution.