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

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.

law_cataCompose :: forall t f u g m b. (Eq b, Show b, Recursive (->) t f, Steppable (->) u g, Recursive (->) u g, MonadTest m) => Proxy u -> Algebra (->) g b -> (forall a. f a -> g a) -> t -> m () Source #

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 branch can generate any case. If the provided branch 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.