yaya-unsafe-0.2.0.0: Non-total extensions to the Yaya recursion scheme library.

Yaya.Unsafe.Fold

Description

Definitions and instances that use direct recursion, which (because of laziness) can lead to non-termination.

Synopsis

# Documentation

anaM :: (Monad m, Steppable (->) t f, Traversable f) => CoalgebraM (->) m f a -> a -> m t Source #

This can’t be implemented in a total fashion. There is a _similar_ approach that can be total – with ψ :: CoalgebraM (->) m f a, ana (Compose . ψ) results in something like Nu (Compose m f) which is akin to an effectful stream.

ganaM :: (Monad m, Monad n, Traversable n, Steppable (->) t f, Traversable f) => DistributiveLaw (->) n f -> GCoalgebraM (->) m n f a -> a -> m t Source #

hylo :: Functor f => Algebra (->) f b -> Coalgebra (->) f a -> a -> b Source #

Fusion of an ana and cata.

ghylo :: (Comonad w, Monad m, Functor f) => DistributiveLaw (->) f w -> DistributiveLaw (->) m f -> GAlgebra (->) w f b -> GCoalgebra (->) m f a -> a -> b Source #

hyloM :: (Monad m, Traversable f) => AlgebraM (->) m f b -> CoalgebraM (->) m f a -> a -> m b Source #

ghyloM :: (Comonad w, Traversable w, Monad m, Traversable f, Monad n, Traversable n) => DistributiveLaw (->) f w -> DistributiveLaw (->) n f -> GAlgebraM (->) m w f b -> GCoalgebraM (->) m n f a -> a -> m b Source #

stream' :: (Projectable (->) t f, Steppable (->) u g, Functor g) => CoalgebraM (->) Maybe g b -> (b -> ((b -> b, t) -> u) -> f t -> u) -> b -> t -> u Source #

streamAna :: (Projectable (->) t f, Steppable (->) u g, Functor g) => CoalgebraM (->) Maybe g b -> AlgebraM (->) ((,) (b -> b)) f t -> b -> t -> u Source #

Gibbons’ metamorphism. It lazily folds a (necessarily infinite) value, incrementally re-expanding that value into some new representation.

streamGApo :: (Projectable (->) t f, Steppable (->) u g, Corecursive (->) u g, Functor g) => Coalgebra (->) g b -> CoalgebraM (->) Maybe g b -> (f t -> Maybe (b -> b, t)) -> b -> t -> u Source #

Another form of Gibbons’ metamorphism. This one can be applied to non- infinite inputs and takes an additional “flushing” coalgebra to be applied after all the input has been consumed.

corecursivePrism :: (Steppable (->) t f, Recursive (->) t f, Corecursive (->) t f, Traversable f) => CoalgebraPrism f a -> Prism' a t Source #