Safe Haskell | None |
---|---|
Language | Haskell2010 |
Generic.Random.Internal.Generic
Contents
Synopsis
- genericArbitrary :: GArbitrary UnsizedOpts a => Weights a -> Gen a
- genericArbitraryU :: (GArbitrary UnsizedOpts a, GUniformWeight a) => Gen a
- genericArbitrarySingle :: (GArbitrary UnsizedOpts a, Weights_ (Rep a) ~ L c0) => Gen a
- genericArbitraryRec :: GArbitrary SizedOptsDef a => Weights a -> Gen a
- genericArbitraryG :: GArbitrary (SetGens genList UnsizedOpts) a => genList -> Weights a -> Gen a
- genericArbitraryUG :: (GArbitrary (SetGens genList UnsizedOpts) a, GUniformWeight a) => genList -> Gen a
- genericArbitrarySingleG :: (GArbitrary (SetGens genList UnsizedOpts) a, Weights_ (Rep a) ~ L c0) => genList -> Gen a
- genericArbitraryRecG :: GArbitrary (SetGens genList SizedOpts) a => genList -> Weights a -> Gen a
- genericArbitraryWith :: GArbitrary opts a => opts -> Weights a -> Gen a
- type family Weights_ (f :: * -> *) :: * where ...
- data a :| b = N a Int b
- data L (c :: Symbol) = L
- data Weights a = Weights (Weights_ (Rep a)) Int
- newtype W (c :: Symbol) = W Int
- weights :: (Weights_ (Rep a), Int, ()) -> Weights a
- uniform :: UniformWeight_ (Rep a) => Weights a
- type family First a :: Symbol where ...
- type family First' w where ...
- type family Prec' w where ...
- class WeightBuilder' w where
- class WeightBuilder a where
- class UniformWeight a where
- uniformWeight :: (a, Int)
- class UniformWeight (Weights_ f) => UniformWeight_ f
- class UniformWeight_ (Rep a) => GUniformWeight a
- newtype Options (s :: Sizing) (genList :: Type) = Options {
- _generators :: genList
- unsizedOpts :: UnsizedOpts
- sizedOpts :: SizedOpts
- sizedOptsDef :: SizedOptsDef
- data Sizing
- type UnsizedOpts = Options 'Unsized ()
- type SizedOpts = Options 'Sized ()
- type SizedOptsDef = Options 'Sized (Gen1 [] :+ ())
- type family SizingOf opts :: Sizing
- proxySizing :: opts -> Proxy (SizingOf opts)
- setSized :: Options s g -> Options 'Sized g
- setUnsized :: Options s g -> Options 'Unsized g
- data a :+ b = a :+ b
- type family GeneratorsOf opts :: Type
- class HasGenerators opts where
- generators :: opts -> GeneratorsOf opts
- setGenerators :: genList -> Options s g0 -> Options s genList
- type family SetGens (g :: Type) opts
- newtype FieldGen (s :: Symbol) a = FieldGen {
- unFieldGen :: Gen a
- fieldGen :: proxy s -> Gen a -> FieldGen s a
- newtype Gen1 f = Gen1 {}
- newtype Gen1_ f = Gen1_ {}
- vectorOf' :: Int -> Gen a -> Gen [a]
- listOf' :: Gen a -> Gen [a]
- listOf1' :: Gen a -> Gen [a]
- geom :: Int -> Gen Int
- class GA opts f where
- class (Generic a, GA opts (Rep a)) => GArbitrary opts a
- gaSum' :: GASum opts f => opts -> Weights_ f -> Int -> Gen (f p)
- class GASum opts f where
- class GAProduct (s :: Sizing) opts f where
- class GAProduct' opts f where
- gaProduct' :: opts -> Gen (f p)
- type family Arity f :: Nat where ...
- class ArbitraryOr (fullGenList :: Type) (genList :: Type) (sel :: Maybe Symbol) a where
- arbitraryOr :: proxy sel -> fullGenList -> genList -> Gen a
- type family SelectorName (d :: Meta) :: Maybe Symbol
- newtype Weighted a = Weighted (Maybe (Int -> Gen a, Int))
- liftGen :: Gen a -> Weighted a
Random generators
Arguments
:: GArbitrary UnsizedOpts 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 :: (GArbitrary UnsizedOpts a, GUniformWeight a) => Gen a Source #
Pick every constructor with equal probability.
Equivalent to
.genericArbitrary
uniform
genericArbitraryU :: Gen a
genericArbitrarySingle :: (GArbitrary UnsizedOpts 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
Arguments
:: GArbitrary SizedOptsDef 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
N.B.: This replaces fields of type [t]
with
.listOf'
arbitrary
genericArbitraryG :: GArbitrary (SetGens genList UnsizedOpts) a => genList -> Weights a -> Gen a Source #
genericArbitrary
with explicit generators.
Example
genericArbitraryG customGens (17 % 19 % ())
where, for example to override generators for String
and Int
fields,
customGens ::GenList
'[String, Int] customGens = (filter (/= 'NUL')<$>
arbitrary):@
(getNonNegative<$>
arbitrary):@
Nil
Note on multiple matches
If the list contains multiple matching types for a field x
of type a
(i.e., either a
or
), the generator for the first
match will be picked.Field
"x" a
genericArbitraryUG :: (GArbitrary (SetGens genList UnsizedOpts) a, GUniformWeight a) => genList -> Gen a Source #
genericArbitraryU
with explicit generators.
See also genericArbitraryG
.
genericArbitrarySingleG :: (GArbitrary (SetGens genList UnsizedOpts) a, Weights_ (Rep a) ~ L c0) => genList -> Gen a Source #
genericArbitrarySingle
with explicit generators.
See also genericArbitraryG
.
Arguments
:: GArbitrary (SetGens genList SizedOpts) a | |
=> genList | |
-> Weights a | List of weights for every constructor |
-> Gen a |
genericArbitraryRec
with explicit generators.
See also genericArbitraryG
.
genericArbitraryWith :: GArbitrary opts a => opts -> Weights a -> Gen a Source #
General generic generator with custom options.
Internal
Constructors
N a Int b |
Instances
(UniformWeight a, UniformWeight b) => UniformWeight (a :| b) Source # | |
Defined in Generic.Random.Internal.Generic Methods uniformWeight :: (a :| b, Int) Source # | |
WeightBuilder a => WeightBuilder (a :| b) Source # | |
type Prec (a :| b) r Source # | |
Defined in Generic.Random.Internal.Generic |
Constructors
L |
Instances
UniformWeight (L c) Source # | |
Defined in Generic.Random.Internal.Generic Methods uniformWeight :: (L c, Int) Source # | |
WeightBuilder (L c) Source # | |
type Prec (L c) r Source # | |
Defined in Generic.Random.Internal.Generic |
Trees of weights assigned to constructors of type a
,
rescaled to obtain a probability distribution.
Two ways of constructing them.
(x1%
x2%
...%
xn%
()) ::Weights
auniform
::Weights
a
Using (
, there must be exactly as many weights as
there are constructors.%
)
uniform
is equivalent to (1
(automatically fills out the right number of 1s).%
... %
1 %
())
newtype W (c :: Symbol) 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")%
())
Constructors
W Int |
weights :: (Weights_ (Rep a), Int, ()) -> Weights a Source #
A smart constructor to specify a custom distribution.
It can be omitted for the %
operator is overloaded to
insert it.
uniform :: UniformWeight_ (Rep a) => Weights a Source #
Uniform distribution.
class WeightBuilder' w where Source #
Methods
(%) :: W (First' w) -> Prec' w -> w infixr 1 Source #
A binary constructor for building up trees of weights.
Instances
WeightBuilder (Weights_ (Rep a)) => WeightBuilder' (Weights a) Source # | |
WeightBuilder a => WeightBuilder' (a, Int, r) Source # | |
class WeightBuilder a where Source #
Instances
WeightBuilder () Source # | |
WeightBuilder (L c) Source # | |
WeightBuilder a => WeightBuilder (a :| b) Source # | |
class UniformWeight a where Source #
Methods
uniformWeight :: (a, Int) Source #
Instances
UniformWeight () Source # | |
Defined in Generic.Random.Internal.Generic Methods uniformWeight :: ((), Int) Source # | |
UniformWeight (L c) Source # | |
Defined in Generic.Random.Internal.Generic Methods uniformWeight :: (L c, Int) Source # | |
(UniformWeight a, UniformWeight b) => UniformWeight (a :| b) Source # | |
Defined in Generic.Random.Internal.Generic Methods uniformWeight :: (a :| b, Int) Source # |
class UniformWeight (Weights_ f) => UniformWeight_ f Source #
Instances
UniformWeight (Weights_ f) => UniformWeight_ f Source # | |
Defined in Generic.Random.Internal.Generic |
class UniformWeight_ (Rep a) => GUniformWeight a Source #
Derived uniform distribution of constructors for a
.
Instances
UniformWeight_ (Rep a) => GUniformWeight a Source # | |
Defined in Generic.Random.Internal.Generic |
newtype Options (s :: Sizing) (genList :: Type) Source #
Type-level options for GArbitrary
.
Constructors
Options | |
Fields
|
Instances
HasGenerators (Options s g) Source # | |
Defined in Generic.Random.Internal.Generic Methods generators :: Options s g -> GeneratorsOf (Options s g) Source # | |
type SetGens g (Options s _g) Source # | |
Defined in Generic.Random.Internal.Generic | |
type GeneratorsOf (Options _s g) Source # | |
Defined in Generic.Random.Internal.Generic | |
type SizingOf (Options s _g) Source # | |
Defined in Generic.Random.Internal.Generic |
unsizedOpts :: UnsizedOpts Source #
Default options for unsized generators.
sizedOptsDef :: SizedOptsDef Source #
Default options overriding the list generator using listOf
`.
Whether to decrease the size parameter before generating fields.
type UnsizedOpts = Options 'Unsized () Source #
proxySizing :: opts -> Proxy (SizingOf opts) Source #
Heterogeneous list of generators.
Constructors
a :+ b infixr 1 |
Instances
ArbitraryOr fg g sel a => ArbitraryOr fg (b :+ g) sel a Source # | |
Defined in Generic.Random.Internal.Generic Methods arbitraryOr :: proxy sel -> fg -> (b :+ g) -> Gen a Source # | |
ArbitraryOr fg (Gen a :+ g) sel a Source # | |
Defined in Generic.Random.Internal.Generic | |
ArbitraryOr fg fg ('Nothing :: Maybe Symbol) a => ArbitraryOr fg (Gen1 f :+ g) sel (f a) Source # | |
Defined in Generic.Random.Internal.Generic | |
ArbitraryOr fg (Gen1_ f :+ g) sel (f a) Source # | |
Defined in Generic.Random.Internal.Generic | |
ArbitraryOr fg (FieldGen n a :+ g) ('Just n) a Source # | |
Defined in Generic.Random.Internal.Generic |
type family GeneratorsOf opts :: Type Source #
Instances
type GeneratorsOf (Options _s g) Source # | |
Defined in Generic.Random.Internal.Generic |
class HasGenerators opts where Source #
Methods
generators :: opts -> GeneratorsOf opts Source #
Instances
HasGenerators (Options s g) Source # | |
Defined in Generic.Random.Internal.Generic Methods generators :: Options s g -> GeneratorsOf (Options s g) Source # |
setGenerators :: genList -> Options s g0 -> Options s genList Source #
newtype FieldGen (s :: Symbol) a Source #
A generator which overrides a specific field named s
.
Available only for base >= 4.9
.
Constructors
FieldGen | |
Fields
|
Instances
ArbitraryOr fg (FieldGen n a :+ g) ('Just n) a Source # | |
Defined in Generic.Random.Internal.Generic |
fieldGen :: proxy s -> Gen a -> FieldGen s a Source #
Field
constructor with the field name given via a proxy.
Generators for containers of kind * -> *
, parameterized by
the generator for each element.
Instances
ArbitraryOr fg fg ('Nothing :: Maybe Symbol) a => ArbitraryOr fg (Gen1 f :+ g) sel (f a) Source # | |
Defined in Generic.Random.Internal.Generic |
Generators for unary type constructors that are not containers.
Instances
ArbitraryOr fg (Gen1_ f :+ g) sel (f a) Source # | |
Defined in Generic.Random.Internal.Generic |
vectorOf' :: Int -> Gen a -> Gen [a] Source #
An alternative to vectorOf
that divides the size parameter by the
length of the list.
listOf' :: Gen a -> Gen [a] Source #
An alternative to listOf
that divides the size parameter by the
length of the list.
The length follows a geometric distribution of parameter
1/(sqrt size + 1)
.
listOf1' :: Gen a -> Gen [a] Source #
An alternative to listOf1
(nonempty lists) that divides the size
parameter by the length of the list.
The length (minus one) follows a geometric distribution of parameter
1/(sqrt size + 1)
.
class GA opts f where Source #
Generic Arbitrary
class (Generic a, GA opts (Rep a)) => GArbitrary opts a Source #
Generic Arbitrary
Instances
(Generic a, GA opts (Rep a)) => GArbitrary opts a Source # | |
Defined in Generic.Random.Internal.Generic |
class GAProduct (s :: Sizing) opts f where Source #
Instances
class GAProduct' opts f where Source #
Methods
gaProduct' :: opts -> Gen (f p) Source #
Instances
GAProduct' opts (U1 :: k -> Type) Source # | |
Defined in Generic.Random.Internal.Generic Methods gaProduct' :: forall (p :: k0). opts -> Gen (U1 p) Source # | |
(GAProduct' opts f, GAProduct' opts g) => GAProduct' opts (f :*: g :: k -> Type) Source # | |
Defined in Generic.Random.Internal.Generic Methods gaProduct' :: forall (p :: k0). opts -> Gen ((f :*: g) p) Source # | |
(HasGenerators opts, ArbitraryOr gs gs (SelectorName d) c, gs ~ GeneratorsOf opts) => GAProduct' opts (S1 d (K1 i c :: k -> Type) :: k -> Type) Source # | |
Defined in Generic.Random.Internal.Generic Methods gaProduct' :: forall (p :: k0). opts -> Gen (S1 d (K1 i c) p) Source # |
class ArbitraryOr (fullGenList :: Type) (genList :: Type) (sel :: Maybe Symbol) a where Source #
Methods
arbitraryOr :: proxy sel -> fullGenList -> genList -> Gen a Source #
Instances
Arbitrary a => ArbitraryOr fg () sel a Source # | |
Defined in Generic.Random.Internal.Generic Methods arbitraryOr :: proxy sel -> fg -> () -> Gen a Source # | |
ArbitraryOr fg g sel a => ArbitraryOr fg (b :+ g) sel a Source # | |
Defined in Generic.Random.Internal.Generic Methods arbitraryOr :: proxy sel -> fg -> (b :+ g) -> Gen a Source # | |
ArbitraryOr fg (Gen a :+ g) sel a Source # | |
Defined in Generic.Random.Internal.Generic | |
ArbitraryOr fg fg ('Nothing :: Maybe Symbol) a => ArbitraryOr fg (Gen1 f :+ g) sel (f a) Source # | |
Defined in Generic.Random.Internal.Generic | |
ArbitraryOr fg (Gen1_ f :+ g) sel (f a) Source # | |
Defined in Generic.Random.Internal.Generic | |
ArbitraryOr fg (FieldGen n a :+ g) ('Just n) a Source # | |
Defined in Generic.Random.Internal.Generic |
type family SelectorName (d :: Meta) :: Maybe Symbol Source #
Instances
type SelectorName ('MetaSel mn su ss ds) Source # | |
Defined in Generic.Random.Internal.Generic type SelectorName ('MetaSel mn su ss ds) = mn |