- class Arbitrary a where
- class CoArbitrary a where
- coarbitrary :: a -> Gen c -> Gen c

- arbitrarySizedIntegral :: Num a => Gen a
- arbitraryBoundedIntegral :: (Bounded a, Integral a) => Gen a
- arbitrarySizedBoundedIntegral :: (Bounded a, Integral a) => Gen a
- arbitrarySizedFractional :: Fractional a => Gen a
- arbitraryBoundedRandom :: (Bounded a, Random a) => Gen a
- shrinkNothing :: a -> [a]
- shrinkList :: (a -> [a]) -> [a] -> [[a]]
- shrinkIntegral :: Integral a => a -> [a]
- shrinkRealFrac :: RealFrac a => a -> [a]
- (><) :: (Gen a -> Gen a) -> (Gen a -> Gen a) -> Gen a -> Gen a
- coarbitraryIntegral :: Integral a => a -> Gen b -> Gen b
- coarbitraryReal :: Real a => a -> Gen b -> Gen b
- coarbitraryShow :: Show a => a -> Gen b -> Gen b
- vector :: Arbitrary a => Int -> Gen [a]
- orderedList :: (Ord a, Arbitrary a) => Gen [a]

# Arbitrary and CoArbitrary classes

Random generation and shrinking of values.

A generator for values of the given type.

Produces a (possibly) empty list of all the possible immediate shrinks of the given value.

class CoArbitrary a whereSource

Used for random generation of functions.

coarbitrary :: a -> Gen c -> Gen cSource

Used to generate a function of type `a -> c`

. The implementation
should use the first argument to perturb the random generator
given as the second argument. the returned generator
is then used to generate the function result.
You can often use `variant`

and `><`

to implement
`coarbitrary`

.

CoArbitrary Bool | |

CoArbitrary Char | |

CoArbitrary Double | |

CoArbitrary Float | |

CoArbitrary Int | |

CoArbitrary Int8 | |

CoArbitrary Int16 | |

CoArbitrary Int32 | |

CoArbitrary Int64 | |

CoArbitrary Integer | |

CoArbitrary Word | |

CoArbitrary Word8 | |

CoArbitrary Word16 | |

CoArbitrary Word32 | |

CoArbitrary Word64 | |

CoArbitrary () | |

CoArbitrary OrdC | |

CoArbitrary OrdB | |

CoArbitrary OrdA | |

CoArbitrary C | |

CoArbitrary B | |

CoArbitrary A | |

CoArbitrary a => CoArbitrary [a] | |

(Integral a, CoArbitrary a) => CoArbitrary (Ratio a) | |

(RealFloat a, CoArbitrary a) => CoArbitrary (Complex a) | |

CoArbitrary a => CoArbitrary (Maybe a) | |

(Arbitrary a, CoArbitrary b) => CoArbitrary (a -> b) | |

(CoArbitrary a, CoArbitrary b) => CoArbitrary (Either a b) | |

(CoArbitrary a, CoArbitrary b) => CoArbitrary (a, b) | |

(CoArbitrary a, CoArbitrary b, CoArbitrary c) => CoArbitrary (a, b, c) | |

(CoArbitrary a, CoArbitrary b, CoArbitrary c, CoArbitrary d) => CoArbitrary (a, b, c, d) | |

(CoArbitrary a, CoArbitrary b, CoArbitrary c, CoArbitrary d, CoArbitrary e) => CoArbitrary (a, b, c, d, e) |

## Helper functions for implementing arbitrary

arbitrarySizedIntegral :: Num a => Gen aSource

Generates an integral number. The number can be positive or negative and its maximum absolute value depends on the size parameter.

arbitraryBoundedIntegral :: (Bounded a, Integral a) => Gen aSource

Generates an integral number. The number is chosen uniformly from
the entire range of the type. You may want to use
`arbitrarySizedBoundedIntegral`

instead.

arbitrarySizedBoundedIntegral :: (Bounded a, Integral a) => Gen aSource

Generates an integral number from a bounded domain. The number is chosen from the entire range of the type, but small numbers are generated more often than big numbers. Inspired by demands from Phil Wadler.

arbitrarySizedFractional :: Fractional a => Gen aSource

Generates a fractional number. The number can be positive or negative and its maximum absolute value depends on the size parameter.

arbitraryBoundedRandom :: (Bounded a, Random a) => Gen aSource

Generates an element of a bounded type. The element is chosen from the entire range of the type.

## Helper functions for implementing shrink

shrinkNothing :: a -> [a]Source

Returns no shrinking alternatives.

shrinkList :: (a -> [a]) -> [a] -> [[a]]Source

shrinkIntegral :: Integral a => a -> [a]Source

Shrink an integral number.

shrinkRealFrac :: RealFrac a => a -> [a]Source

Shrink a fraction.

## Helper functions for implementing coarbitrary

(><) :: (Gen a -> Gen a) -> (Gen a -> Gen a) -> Gen a -> Gen aSource

Combine two generator perturbing functions, for example the
results of calls to `variant`

or `coarbitrary`

.

coarbitraryIntegral :: Integral a => a -> Gen b -> Gen bSource

A `coarbitrary`

implementation for integral numbers.

coarbitraryReal :: Real a => a -> Gen b -> Gen bSource

A `coarbitrary`

implementation for real numbers.

coarbitraryShow :: Show a => a -> Gen b -> Gen bSource

`coarbitrary`

helper for lazy people :-).

## Generators which use arbitrary

orderedList :: (Ord a, Arbitrary a) => Gen [a]Source

Generates an ordered list of a given length.