Data.Functor.Contravariant.Adjunction

adjunctions-4.3: Adjunctions and representable functors

Copyright | (C) 2011-2013 Edward Kmett
License | BSD-style (see the file LICENSE)
Maintainer | Edward Kmett <ekmett@gmail.com>
Stability | provisional
Portability | MPTCs
Safe Haskell | Trustworthy
Language | Haskell98

Data.Functor.Contravariant.Adjunction

Description

Synopsis

- class (Contravariant f, Representable g) => Adjunction f g | f -> g, g -> f where
  - unit :: a -> g (f a)
  - counit :: a -> f (g a)
  - leftAdjunct :: (b -> f a) -> a -> g b
  - rightAdjunct :: (a -> g b) -> b -> f a
- adjuncted :: (Adjunction f g, Profunctor p, Functor h) => p (a -> g b) (h (c -> g d)) -> p (b -> f a) (h (d -> f c))
- contrarepAdjunction :: Adjunction f g => (a -> f ()) -> g a
- coindexAdjunction :: Adjunction f g => g a -> a -> f ()

# Documentation

class (Contravariant f, Representable g) => Adjunction f g | f -> g, g -> f where

An adjunction from `Hask^op` to `Hask`

    Op (f a) b ~ Hask a (g b)

    rightAdjunct unit = id
    leftAdjunct counit = id

Any adjunction from `Hask` to `Hask^op` would indirectly permit `unsafePerformIO`, and therefore does not exist.

Minimal complete definition

Nothing

Methods

unit :: a -> g (f a)

counit :: a -> f (g a)

leftAdjunct :: (b -> f a) -> a -> g b

rightAdjunct :: (a -> g b) -> b -> f a

Instances

Adjunction Predicate Predicate | This gives rise to the `Cont Bool` `Monad`
Adjunction (Op r) (Op r) | This `Adjunction` gives rise to the `Cont` `Monad`

adjuncted :: (Adjunction f g, Profunctor p, Functor h) => p (a -> g b) (h (c -> g d)) -> p (b -> f a) (h (d -> f c))

`leftAdjunct` and `rightAdjunct` form two halves of an isomorphism.

This can be used with the combinators from the `lens` package.

    adjuncted :: Adjunction f g => Iso' (b -> f a) (a -> g b)

contrarepAdjunction :: Adjunction f g => (a -> f ()) -> g a

Represent a `Contravariant` functor that has a left adjoint

coindexAdjunction :: Adjunction f g => g a -> a -> f ()