Copyright | 2013 Edward Kmett and Dan Doel |
---|---|
License | BSD |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Stability | experimental |
Portability | rank N types |
Safe Haskell | Trustworthy |
Language | Haskell98 |
Left Kan lifts for functors over Hask, wherever they exist.
- newtype Lift g f a = Lift {}
- toLift :: Functor z => (forall a. f a -> g (z a)) -> Lift g f b -> z b
- fromLift :: Adjunction l u => (forall a. Lift u f a -> z a) -> f b -> u (z b)
- glift :: Adjunction l g => k a -> g (Lift g k a)
- composeLift :: (Composition compose, Functor f, Functor g) => Lift f (Lift g h) a -> Lift (compose g f) h a
- decomposeLift :: (Composition compose, Adjunction l g) => Lift (compose g f) h a -> Lift f (Lift g h) a
- adjointToLift :: Adjunction f u => f a -> Lift u Identity a
- liftToAdjoint :: Adjunction f u => Lift u Identity a -> f a
- liftToComposedAdjoint :: (Adjunction f u, Functor h) => Lift u h a -> f (h a)
- composedAdjointToLift :: Adjunction f u => f (h a) -> Lift u h a
- repToLift :: Representable u => Rep u -> a -> Lift u Identity a
- liftToRep :: Representable u => Lift u Identity a -> (Rep u, a)
- liftToComposedRep :: (Functor h, Representable u) => Lift u h a -> (Rep u, h a)
- composedRepToLift :: Representable u => Rep u -> h a -> Lift u h a
Left Kan lifts
f => g . Lift g f (forall z. f => g . z) -> Lift g f => z -- couniversal
Here we use the universal property directly as how we extract from our definition of Lift
.
toLift :: Functor z => (forall a. f a -> g (z a)) -> Lift g f b -> z b Source
The universal property of Lift
fromLift :: Adjunction l u => (forall a. Lift u f a -> z a) -> f b -> u (z b) Source
glift :: Adjunction l g => k a -> g (Lift g k a) Source
f => g (Lift
g f a)
composeLift :: (Composition compose, Functor f, Functor g) => Lift f (Lift g h) a -> Lift (compose g f) h a Source
composeLift
.decomposeLift
=id
decomposeLift
.composeLift
=id
decomposeLift :: (Composition compose, Adjunction l g) => Lift (compose g f) h a -> Lift f (Lift g h) a Source
adjointToLift :: Adjunction f u => f a -> Lift u Identity a Source
Lift u Identity a
is isomorphic to the left adjoint to u
if one exists.
adjointToLift
.liftToAdjoint
≡id
liftToAdjoint
.adjointToLift
≡id
liftToAdjoint :: Adjunction f u => Lift u Identity a -> f a Source
Lift u Identity a
is isomorphic to the left adjoint to u
if one exists.
liftToComposedAdjoint :: (Adjunction f u, Functor h) => Lift u h a -> f (h a) Source
Lift u h a
is isomorphic to the post-composition of the left adjoint of u
onto h
if such a left adjoint exists.
liftToComposedAdjoint
.composedAdjointToLift
≡id
composedAdjointToLift
.liftToComposedAdjoint
≡id
composedAdjointToLift :: Adjunction f u => f (h a) -> Lift u h a Source
Lift u h a
is isomorphic to the post-composition of the left adjoint of u
onto h
if such a left adjoint exists.
liftToComposedRep :: (Functor h, Representable u) => Lift u h a -> (Rep u, h a) Source
composedRepToLift :: Representable u => Rep u -> h a -> Lift u h a Source