profunctor-extras-0.1: Data/Profunctor/Composition.hs
{-# LANGUAGE GADTs #-}
module Data.Profunctor.Composition
( Compose(..)
) where
import Data.Profunctor
data Compose f g d c where
Compose :: f d a -> g a c -> Compose f g d c
instance (Profunctor f, Profunctor g) => Profunctor (Compose f g) where
lmap k (Compose f g) = Compose (lmap k f) g
rmap k (Compose f g) = Compose f (rmap k g)
instance Profunctor g => Functor (Compose f g a) where
fmap k (Compose f g) = Compose f (rmap k g)