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

Stability | experimental |

Maintainer | generics@haskell.org |

A variant of fold that allows the specification of the algebra in a convenient way, and that fixes the result type to a constant.

# The type family of convenient algebras.

type Algebra phi r = forall ix. phi ix -> Alg (PF phi) rSource

The algebras passed to the fold have to work for all index types in the family. The additional witness argument is required only to make GHC's typechecker happy.

# The class to turn convenient algebras into standard algebras.

The class fold explains how to convert a convenient algebra
`Alg`

back into a function from functor to result, as required
by the standard fold function.

# Interface

fold :: forall phi ix r. (Fam phi, HFunctor phi (PF phi), Fold (PF phi)) => Algebra phi r -> phi ix -> ix -> rSource

Fold with convenient algebras.