@hackage generic-random0.4.1.0
Generic random generators
Installation
Dependencies (3)
- QuickCheck
- base >=4.9 && <4.10
- boltzmann-samplers <=0.2 Show all…
Dependents (56)
@hackage/multilinear, @cardano/hydra-prelude, @hackage/binrep, @cardano/ouroboros-consensus-shelley-test, @cardano/cardano-ledger-core, @cardano/ouroboros-consensus-cardano, Show all…
Package Flags
boltzmann
(on by default)
Dependency on boltzmann-samplers for backwards compatibility.
Generic random generators

Say goodbye to Constructor <$> arbitrary <*> arbitrary <*> arbitrary-boilerplate.
{-# LANGUAGE DeriveGeneric #-}
import GHC.Generics ( Generic )
import Test.QuickCheck
import Generic.Random.Generic
data Tree a = Leaf | Node (Tree a) a (Tree a)
deriving (Show, Generic)
instance Arbitrary a => Arbitrary (Tree a) where
arbitrary = genericArbitrary' Z uniform
-- Equivalent to
-- > arbitrary =
-- > sized $ \n ->
-- > if n == 0 then
-- > return Leaf
-- > else
-- > oneof
-- > [ return Leaf
-- > , Node <$> arbitrary <*> arbitrary <*> arbitrary
-- > ]
main = sample (arbitrary :: Gen (Tree ()))
- User-specified distribution of constructors, with a compile-time check that weights have been specified for all constructors.
- A simple (optional) strategy to ensure termination:
Test.QuickCheck.Gen's size parameter decreases at every recursivegenericArbitrary'call; when it reaches zero, sample directly from a finite set of finite values.