pandora-0.5.3: Pandora/Pattern/Functor/Adjoint.hs
module Pandora.Pattern.Functor.Adjoint where
import Pandora.Pattern.Functor.Covariant (Covariant)
type (-|) = Adjoint
infixl 1 --------|, |--------
infixl 2 -------|, |-------
infixl 3 ------|, |------
infixl 4 -----|, |-----
infixl 5 ----|, |----
infixl 6 ---|, |---
infixl 7 --|, |--
infixl 8 -|, |-
{- |
> When providing a new instance, you should ensure it satisfies:
> * Left adjunction identity: phi cozero ≡ identity
> * Right adjunction identity: psi zero ≡ identity
> * Left adjunction interchange: phi f ≡ comap f . eta
> * Right adjunction interchange: psi f ≡ epsilon . comap f
-}
class (Covariant target source t, Covariant source target u) => Adjoint source target t u where
(-|) :: source (t a) b -> target a (u b)
(|-) :: target a (u b) -> source (t a) b
(|--------), (|-------), (|------), (|-----), (|----), (|---), (|--) :: target a (u b) -> source (t a) b
(|--------) = (|-)
(|-------) = (|-)
(|------) = (|-)
(|-----) = (|-)
(|----) = (|-)
(|---) = (|-)
(|--) = (|-)
(--------|), (-------|), (------|), (-----|), (----|), (---|), (--|) :: source (t a) b -> target a (u b)
(--------|) = (-|)
(-------|) = (-|)
(------|) = (-|)
(-----|) = (-|)
(----|) = (-|)
(---|) = (-|)
(--|) = (-|)