multirec-0.7.8: Generic programming for families of recursive datatypes

Copyright(c) 2009--2010 Universiteit Utrecht
LicenseBSD3
Maintainergenerics@haskell.org
Stabilityexperimental
Portabilitynon-portable
Safe HaskellSafe
LanguageHaskell2010

Generics.MultiRec.FoldK

Contents

Description

Variant of Generics.MultiRec.Fold where the result type is independent of the index.

Synopsis

Generic fold and unfold

type Algebra' phi f r = forall ix. phi ix -> f (K0 r) ix -> r Source #

type Algebra phi r = Algebra' phi (PF phi) r Source #

type AlgebraF' phi f g r = forall ix. phi ix -> f (K0 r) ix -> g r Source #

type AlgebraF phi g r = AlgebraF' phi (PF phi) g r Source #

fold :: (Fam phi, HFunctor phi (PF phi)) => Algebra phi r -> phi ix -> ix -> r Source #

foldM :: (Fam phi, HFunctor phi (PF phi), Monad m) => AlgebraF phi m r -> phi ix -> ix -> m r Source #

type CoAlgebra' phi f r = forall ix. phi ix -> r -> f (K0 r) ix Source #

type CoAlgebra phi r = CoAlgebra' phi (PF phi) r Source #

type CoAlgebraF' phi f g r = forall ix. phi ix -> r -> g (f (K0 r) ix) Source #

type CoAlgebraF phi g r = CoAlgebraF' phi (PF phi) g r Source #

unfold :: (Fam phi, HFunctor phi (PF phi)) => CoAlgebra phi r -> phi ix -> r -> ix Source #

unfoldM :: (Fam phi, HFunctor phi (PF phi), Monad m) => CoAlgebraF phi m r -> phi ix -> r -> m ix Source #

type ParaAlgebra' phi f r = forall ix. phi ix -> f (K0 r) ix -> ix -> r Source #

type ParaAlgebra phi r = ParaAlgebra' phi (PF phi) r Source #

type ParaAlgebraF' phi f g r = forall ix. phi ix -> f (K0 r) ix -> ix -> g r Source #

type ParaAlgebraF phi g r = ParaAlgebraF' phi (PF phi) g r Source #

para :: (Fam phi, HFunctor phi (PF phi)) => ParaAlgebra phi r -> phi ix -> ix -> r Source #

paraM :: (Fam phi, HFunctor phi (PF phi), Monad m) => ParaAlgebraF phi m r -> phi ix -> ix -> m r Source #

Creating an algebra

type AlgPart f b ix = f (K0 b) ix -> b Source #

type (:->) f g b ix = f b ix -> g b ix infixr 9 Source #

(&) :: (AlgPart a :-> (AlgPart b :-> AlgPart (a :+: b))) c ix infixr 5 Source #

tag :: AlgPart a c ix -> AlgPart (a :>: ix) c ix' Source #

con :: AlgPart a b ix -> AlgPart (C c a) b ix Source #