Anamorphisms, or unfolds, model primitive corecursion.
ana builds up a fixpoint layer by layer, using a coalgebra function (or unfolding function) to produce each new layer.
ana requires a
Functor instance for the template type
ana :: Functor f => (a -> f a) -> a -> Fix f ana f = Fix . fmap (ana f) . f -- list example unfoldr :: (b -> Maybe (a, b)) -> b -> List a unfoldr f = ana coalg where coalg x = case f x of Nothing -> Nil_ Just (x, y) -> Cons_ x y
cata are dual. The types and implementations are mirror images of one another.