Module ContingentClaims.Core.Util.Recursion¶
This module collects a set of utilities used to execute recursion schemes.
The morphisms ending in ‘M’ are monadic variants, allowing to interleave, e.g., Update
or
Script
. cataM
after Tim Williams’ talk, https://www.youtube.com/watch?v=Zw9KeP3OzpU.
Functions¶
- paraM
: (Monad m, Traversable f, Recursive b f) => (f (b, a) -> m a) -> b -> m a
Monadic paramorphism.
- anaM
: (Monad m, Traversable f, Corecursive b f) => (a -> m (f a)) -> a -> m b
Monadic anamorphism.
- apoM
: (Monad m, Traversable f, Corecursive b f) => (a -> m (f (Either b a))) -> a -> m b
Monadic apomorphism.
- futuM
: (Monad m, Traversable f, Corecursive b f) => (a -> m (f (Free f a))) -> a -> m b
Monadic futumorphism.
- apoCataM
: (Monad m, Traversable f, Corecursive b f) => (f b -> b) -> (a -> m (f (Either b a))) -> a -> m b
Monadic lazy unfold (apoM) followed by a fold (cata). This Specialised lazy re-fold is used by
lifecycle
.
- hyloM
: (Traversable f, Monad n) => (f b -> b) -> (a -> n (f a)) -> a -> n b
A modified
hylo
(refold), whith an interleaved monad effect (typicallyUpdate
).
- ghyloM
: (Comonad w, Traversable f, Monad m, Traversable m, Monad n) => (f (w c) -> w (f c)) -> (m (f d) -> f (m d)) -> (f (w b) -> b) -> (a -> n (f (m a))) -> a -> n b
Generalised hylomorphism (with monadic unfold).
- synthesize
: (Functor f, Recursive b f) => (f attr -> attr) -> b -> Cofree f attr
Annotate a recursive type bottom-up.