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 |

## 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.

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

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

## Instances

Adjunction Predicate Predicate # | This gives rise to the |

Adjunction (Op r) (Op r) # | This |

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 () #