generic-random-0.1.0.0: Generic random generators

Safe HaskellNone
LanguageHaskell2010

Data.Random.Generics.Internal

Contents

Synopsis

Documentation

data SG r Source

Sized generator.

Constructors

SG 

Fields

minSize :: Size
 
maxSizeM :: Maybe Size
 
runSG :: Points -> Maybe Double -> r
 
runSmallG :: Points -> r
 

Instances

type Points = Int Source

Number of pointing iterations.

applySG :: SG r -> Points -> Maybe Double -> r Source

For documentation.

Helper functions

make :: (Data a, MonadRandomLike m) => [Alias m] -> proxy a -> SG (m a) Source

makeR :: (Data a, MonadRandomLike m) => [AliasR m] -> proxy a -> SG ((Size, Size) -> m a) Source

type Size' = Int Source

The size of a value is its number of constructors.

Here, however, the Size' type is interpreted differently to make better use of QuickCheck's size parameter provided by the sized combinator, so that we generate non-trivial data even at very small size values.

For infinite types, with objects of unbounded sizes > minSize, given a parameter delta :: Size', the produced values have an average size close to minSize + delta.

For example, values of type Either () [Bool] have at least two constructors, so

  generator delta :: Gen (Either () [Bool])

will target sizes close to 2 + delta; the offset becomes less noticeable as delta grows to infinity.

For finite types with sizes in [minSize, maxSize], the target expected size is obtained by clamping a Size' to [0, 99] and applying an affine mapping.

apply :: SG r -> Points -> Maybe Size' -> r Source

applyR :: SG ((Size, Size) -> r) -> Points -> Maybe Size' -> (Size', Size') -> r Source

epsilon :: Double Source

'epsilon' = 0.1

Default approximation ratio.

tolerance :: Double -> Int -> (Int, Int) Source

(size * (1 - epsilon), size * (1 + epsilon))

Auxiliary definitions

memo :: (t -> [t2] -> SG r) -> (SG r -> t1 -> Maybe Int -> a) -> t -> t1 -> Int -> a Source

sparseSized :: (Int -> a) -> Maybe Int -> Int -> a Source