Control.Comonad.Density

kan-extensions-5.0.1: Kan extensions, Kan lifts, various forms of the Yoneda lemma, and (co)density (co)monads

Copyright | (C) 2008-2016 Edward Kmett
License | BSD-style (see the file LICENSE)
Maintainer | Edward Kmett <ekmett@gmail.com>
Stability | experimental
Portability | non-portable (GADTs, MPTCs)
Safe Haskell | Safe
Language | Haskell98

Control.Comonad.Density

Description

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 (``Lan` f f`) forms a `Comonad`. This is that `Comonad`.

Synopsis

- data Density k a where
  - Density :: (k b -> a) -> k b -> Density k a
- 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

data Density k a where

Constructors

Density :: (k b -> a) -> k b -> Density k a |

Instances

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

The natural transformation from a ``Comonad` w` to the `Comonad` generated by `w` (forwards).

This is merely a right-inverse (section) of `lower`, rather than a full inverse.

    lower . liftDensity ≡ id

densityToAdjunction :: Adjunction f g => Density f a -> f (g a)

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

densityToLan :: Density f a -> Lan f f a

lanToDensity :: Lan f f a -> Density f a

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