Portability | non-portable |
---|---|

Stability | experimental |

Maintainer | generics@haskell.org |

Safe Haskell | Safe-Inferred |

Summary: Generic folding and unfolding.

- type family Alg f r :: *
- type Algebra a r = Alg (PF a) r
- class Fold f where
- fold :: (Regular a, Fold (PF a), Functor (PF a)) => Algebra a r -> a -> r
- type family CoAlg f s :: *
- type CoAlgebra a s = s -> CoAlg (PF a) s
- class Unfold f where
- unfold :: (Unfold (PF a), Regular a) => CoAlgebra a s -> s -> a
- (&) :: a -> b -> (a, b)

# Generic folding

The class fold explains how to convert an algebra
`Alg`

into a function from functor to result.

fold :: (Regular a, Fold (PF a), Functor (PF a)) => Algebra a r -> a -> rSource

Fold with convenient algebras.

# Generic unfolding

The class unfold explains how to convert a coalgebra `CoAlg`

and a seed
into a representation.