Safe Haskell | Safe |
---|---|
Language | Haskell98 |
Unsafe combinators for the Gen
monad.
Gen
is only morally a monad: two generators that are supposed
to be equal will give the same probability distribution, but they
might be different as functions from random number seeds to values.
QuickCheck maintains the illusion that a Gen
is a probability
distribution and does not allow you to distinguish two generators
that have the same distribution.
The functions in this module allow you to break this illusion by reusing the same random number seed twice. This is unsafe because by applying the same seed to two morally equal generators, you can see whether they are really equal or not.
Documentation
promote :: Monad m => m (Gen a) -> Gen (m a) Source
Promotes a monadic generator to a generator of monadic values.
A variant of delay
that returns a polymorphic evaluation function.
Can be used in a pinch to generate polymorphic (rank-2) values:
genSelector :: Gen (a -> a -> a) genSelector = elements [\x y -> x, \x y -> y] data Selector = Selector (forall a. a -> a -> a) genPolySelector :: Gen Selector genPolySelector = do Capture eval <- capture return (Selector (eval genSelector))