3 | module Data.Profunctor.Functor
5 | import Data.Profunctor.Types
16 | interface ProfunctorFunctor (0 t : (Type -> Type -> Type) -> k -> k' -> Type) where
18 | promap : Profunctor p => p :-> q -> t p :-> t q
28 | interface ProfunctorFunctor t =>
29 | ProfunctorMonad (0 t : (Type -> Type -> Type) -> Type -> Type -> Type) where
30 | propure : Profunctor p => p :-> t p
31 | projoin : Profunctor p => t (t p) :-> t p
40 | interface ProfunctorFunctor t =>
41 | ProfunctorComonad (0 t : (Type -> Type -> Type) -> Type -> Type -> Type) where
42 | proextract : Profunctor p => t p :-> p
43 | produplicate : Profunctor p => t p :-> t (t p)
51 | interface (ProfunctorFunctor l,
ProfunctorFunctor r) =>
52 | ProfunctorAdjunction (0 l, r : (Type -> Type -> Type) -> Type -> Type -> Type) | l, r where
53 | prounit : Profunctor p => p :-> r (l p)
54 | procounit : Profunctor p => l (r p) :-> p