Copyright | (C) 2008-2011 Edward Kmett |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Stability | experimental |
Portability | non-portable (GADTs, MPTCs) |
Safe Haskell | Trustworthy |
Language | Haskell98 |
The Density
Comonad
for a Functor
(aka the 'Comonad generated by a Functor
)
The Density
term dates back to Dubuc''s 1974 thesis. The term
Monad
genererated by a Functor
dates back to 1972 in Street''s
''Formal Theory of Monads''.
The left Kan extension of a Functor
along itself (
) forms a Lan
f fComonad
. This is
that Comonad
.
- data Density k a where
- liftDensity :: Comonad w => w a -> Density w a
- densityToAdjunction :: Adjunction f g => Density f a -> f (g a)
- adjunctionToDensity :: Adjunction f g => f (g a) -> Density f a
- densityToLan :: Density f a -> Lan f f a
- lanToDensity :: Lan f f a -> Density f a
Documentation
ComonadTrans Density | |
Functor (Density f) | |
Applicative f => Applicative (Density f) | |
Comonad (Density f) | |
Apply f => Apply (Density f) | |
Extend (Density f) |
liftDensity :: Comonad w => w a -> Density w a Source
densityToAdjunction :: Adjunction f g => Density f a -> f (g a) Source
The Density Comonad
of a left adjoint is isomorphic to the Comonad
formed by that Adjunction
.
This isomorphism is witnessed by densityToAdjunction
and adjunctionToDensity
.
densityToAdjunction
.adjunctionToDensity
≡id
adjunctionToDensity
.densityToAdjunction
≡id
adjunctionToDensity :: Adjunction f g => f (g a) -> Density f a Source
densityToLan :: Density f a -> Lan f f a Source
lanToDensity :: Lan f f a -> Density f a Source
The Density
Comonad
of a Functor
f
is obtained by taking the left Kan extension
(Lan
) of f
along itself. This isomorphism is witnessed by lanToDensity
and densityToLan
lanToDensity
.densityToLan
≡id
densityToLan
.lanToDensity
≡id