yaya-hedgehog-0.1.1.0: Hedgehog testing support for the Yaya recursion scheme library.

Safe HaskellNone
LanguageHaskell2010

Yaya.Hedgehog.Fold

Synopsis

Documentation

law_cataCancel :: (Eq a, Show a, Steppable t f, Recursive t f, Functor f, MonadTest m) => Algebra f a -> f t -> m () Source #

law_cataRefl :: (Eq t, Show t, Steppable t f, Recursive t f, MonadTest m) => t -> m () Source #

law_anaRefl :: (Eq t, Show t, Steppable t f, Corecursive t f, MonadTest m) => t -> m () Source #

NB: Since this requires both a Corecursive and Eq instance on the same type, it _likely_ requires instances from yaya-unsafe.

embeddableOfHeight :: (Steppable t f, Functor f) => Gen (f Void) -> (Gen t -> Gen (f t)) -> Size -> Gen t Source #

Creates a generator for any Steppable type whose pattern functor has terminal cases (e.g., not Identity or `((,) a)`). leaf can only generate terminal cases, and any can generate any case. If the provided any generates terminal cases, then the resulting tree may have a height less than the Size, otherwise it will be a perfect tree with a height of exactly the provided Size.

This is similar to recursive in that it separates the non-recursive cases from the recursive ones, except • the types here also ensure that the non-recursive cases aren’t recursive, • different generator distributions may be used for rec & non-rec cases, and • the non-recursive cases aren’t included in recursive calls (see above for why).

If there’s no existing `Gen (f Void)` for your pattern functor, you can either create one manually, or pass discard to the usual `Gen a -> Gen (f a)` generator.

  • NB*: Hedgehog’s Size is signed, so this can raise an exception if given a negative Size.

genAlgebra :: (Steppable t f, Functor f) => Gen (f Void) -> (Gen t -> Gen (f t)) -> Algebra Maybe (Gen t) Source #

Builds a generic tree generator of a certain height.

genCorecursive :: Corecursive t f => (a -> f a) -> Gen a -> Gen t Source #

Creates a generator for potentially-infinite values.