{-# LANGUAGE RankNTypes #-} {-# LANGUAGE TypeOperators #-} module Data.Profunctor.Monad where import Data.Profunctor class ProfunctorMonad t where proreturn :: Profunctor p => p -/-> t p projoin :: Profunctor p => t (t p) -/-> t p class ProfunctorComonad t where proextract :: Profunctor p => t p -/-> p produplicate :: Profunctor p => t p -/-> t (t p)