proton-0.0.2: src/Data/Profunctor/Joinable.hs
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}
module Data.Profunctor.Joinable where
import Data.Profunctor
class Profunctor p => Joinable p m | p -> m where
join' :: p a (m b) -> p a b
instance Monad m => Joinable (Star m) m where
join' (Star f) = Star (join . f)
where
join m = m >>= id
instance Monad m => Joinable (Forget (m r)) m where
join' (Forget f) = Forget f