Portability | non-portable (rank-2 polymorphism) |
---|---|
Stability | experimental |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Algebras, Coalgebras, Bialgebras, and Dialgebras and their (co)monadic variants
- type Dialgebra f g a = f a -> g a
- type GDialgebra f g w m a = f (w a) -> g (m a)
- type Bialgebra f g a = (Algebra f a, Coalgebra g a)
- type GBialgebra f g w m a = (GAlgebra f w a, GCoalgebra g m a)
- type Algebra f a = f a -> a
- type GAlgebra f w a = f (w a) -> a
- type Coalgebra f a = a -> f a
- type GCoalgebra f m a = a -> f (m a)
- type Trialgebra f g h a = (Algebra f a, Dialgebra g h a)
- liftAlgebra :: (Functor f, Comonad w) => Algebra f :~> GAlgebra f w
- liftCoalgebra :: (Functor f, Monad m) => Coalgebra f :~> GCoalgebra f m
- liftDialgebra :: (Functor g, Functor f, Comonad w, Monad m) => Dialgebra f g :~> GDialgebra f g w m
- fromCoalgebra :: Coalgebra f :~> Dialgebra Identity f
- fromAlgebra :: Algebra f :~> Dialgebra f Identity
- fromBialgebra :: Bialgebra f g :~> Dialgebra (f :*: Identity) (Identity :*: g)
Documentation
type GDialgebra f g w m a = f (w a) -> g (m a)Source
type Bialgebra f g a = (Algebra f a, Coalgebra g a)Source
F-G-bialgebras are representable by DiAlg (f :+: Identity) (Identity :+: g) a
and so add no expressive power, but are a lot more convenient.
type GBialgebra f g w m a = (GAlgebra f w a, GCoalgebra g m a)Source
type GCoalgebra f m a = a -> f (m a)Source
F-M-Monadic Coalgebras for a given monad M
type Trialgebra f g h a = (Algebra f a, Dialgebra g h a)Source
Martin Erwig's trialgebras for indexed data types
liftAlgebra :: (Functor f, Comonad w) => Algebra f :~> GAlgebra f wSource
Turn an F-algebra into a F-W-algebra by throwing away the comonad
liftCoalgebra :: (Functor f, Monad m) => Coalgebra f :~> GCoalgebra f mSource
Turn a F-coalgebra into a F-M-coalgebra by returning into a monad
liftDialgebra :: (Functor g, Functor f, Comonad w, Monad m) => Dialgebra f g :~> GDialgebra f g w mSource