Description

Synopsis

# Documentation

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

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) Source

counit :: a -> f (g a) Source

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

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

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)) Source

`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 Source

Represent a `Contravariant` functor that has a left adjoint

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