Copyright | 2008-2016 Edward Kmett |
---|---|
License | BSD |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Stability | experimental |
Portability | rank 2 types |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Left Kan Extensions
Synopsis
- data Lan (g :: k -> Type) (h :: k -> Type) a where
- toLan :: forall {k} f h g b. Functor f => (forall (a :: k). h a -> f (g a)) -> Lan g h b -> f b
- fromLan :: forall {k} g h f (b :: k). (forall a. Lan g h a -> f a) -> h b -> f (g b)
- glan :: forall {k} h (a :: k) g. h a -> Lan g h (g a)
- composeLan :: forall (compose :: (Type -> Type) -> (Type -> Type) -> Type -> Type) (f :: Type -> Type) (g :: Type -> Type) (h :: Type -> Type) a. (Composition compose, Functor f) => Lan f (Lan g h) a -> Lan (compose f g) h a
- decomposeLan :: forall (compose :: (Type -> Type) -> (Type -> Type) -> Type -> Type) (f :: Type -> Type) (g :: Type -> Type) (h :: Type -> Type) a. Composition compose => Lan (compose f g) h a -> Lan f (Lan g h) a
- adjointToLan :: forall (f :: Type -> Type) g a. Adjunction f g => g a -> Lan f Identity a
- lanToAdjoint :: forall (f :: Type -> Type) g a. Adjunction f g => Lan f Identity a -> g a
- composedAdjointToLan :: forall (f :: Type -> Type) g h a. Adjunction f g => h (g a) -> Lan f h a
- lanToComposedAdjoint :: forall h (f :: Type -> Type) g a. (Functor h, Adjunction f g) => Lan f h a -> h (g a)
Left Kan Extensions
toLan :: forall {k} f h g b. Functor f => (forall (a :: k). h a -> f (g a)) -> Lan g h b -> f b Source #
The universal property of a left Kan extension.
glan :: forall {k} h (a :: k) g. h a -> Lan g h (g a) Source #
This is the natural transformation that defines a Left Kan extension.
composeLan :: forall (compose :: (Type -> Type) -> (Type -> Type) -> Type -> Type) (f :: Type -> Type) (g :: Type -> Type) (h :: Type -> Type) a. (Composition compose, Functor f) => Lan f (Lan g h) a -> Lan (compose f g) h a Source #
composeLan
and decomposeLan
witness the natural isomorphism from Lan f (Lan g h)
and Lan (f
o
g) h
composeLan
.decomposeLan
≡id
decomposeLan
.composeLan
≡id
decomposeLan :: forall (compose :: (Type -> Type) -> (Type -> Type) -> Type -> Type) (f :: Type -> Type) (g :: Type -> Type) (h :: Type -> Type) a. Composition compose => Lan (compose f g) h a -> Lan f (Lan g h) a Source #
adjointToLan :: forall (f :: Type -> Type) g a. Adjunction f g => g a -> Lan f Identity a Source #
adjointToLan
.lanToAdjoint
≡id
lanToAdjoint
.adjointToLan
≡id
lanToAdjoint :: forall (f :: Type -> Type) g a. Adjunction f g => Lan f Identity a -> g a Source #
composedAdjointToLan :: forall (f :: Type -> Type) g h a. Adjunction f g => h (g a) -> Lan f h a Source #
lanToComposedAdjoint :: forall h (f :: Type -> Type) g a. (Functor h, Adjunction f g) => Lan f h a -> h (g a) Source #
lanToComposedAdjoint
and composedAdjointToLan
witness the natural isomorphism between Lan f h
and Compose h g
given f -| g
composedAdjointToLan
.lanToComposedAdjoint
≡id
lanToComposedAdjoint
.composedAdjointToLan
≡id