Safe Haskell  Trustworthy 

 class Profunctor p => Closed p where
 closed :: p a b > p (x > a) (x > b)
 newtype Closure p a b = Closure {
 runClosure :: forall x. p (x > a) (x > b)
 close :: Closed p => (p :> q) > p :> Closure q
 unclose :: Profunctor q => (p :> Closure q) > p :> q
 data Environment p a b where
 Environment :: ((z > y) > b) > p x y > (a > z > x) > Environment p a b
Documentation
class Profunctor p => Closed p whereSource
A strong profunctor allows the monoidal structure to pass through.
A closed profunctor allows the closed structure to pass through.
Closure
adjoins a Closed
structure to any Profunctor
.
Closure  

ProfunctorComonad Closure  
ProfunctorFunctor Closure  
ProfunctorAdjunction Environment Closure  
Arrow p => Arrow (Closure p)  
ArrowZero p => ArrowZero (Closure p)  
ArrowPlus p => ArrowPlus (Closure p)  
ArrowLoop p => ArrowLoop (Closure p)  
Category p => Category (Closure p)  
Profunctor p => Profunctor (Closure p)  
Strong p => Strong (Closure p)  
Profunctor p => Closed (Closure p)  
Profunctor p => Functor (Closure p a)  
(Profunctor p, Arrow p) => Applicative (Closure p a)  
(Profunctor p, ArrowPlus p) => Alternative (Closure p a)  
(Profunctor p, Arrow p, Monoid b) => Monoid (Closure p a b) 
data Environment p a b whereSource
Environment :: ((z > y) > b) > p x y > (a > z > x) > Environment p a b 