packages feed

proton-0.0.1: src/Data/Profunctor/Phantom.hs

module Data.Profunctor.Phantom where

import Data.Profunctor
import qualified Data.Functor.Contravariant as C
import Data.Profunctor.Cayley

class Profunctor p => Phantom p where
    phantom :: p a x -> p a y

instance Phantom (Forget r) where
  phantom (Forget f) = Forget f

instance (Functor f, C.Contravariant f) => Phantom (Star f) where
  phantom (Star f) = Star (C.phantom . f)

instance (Functor f, Phantom p) => Phantom (Cayley f p) where
  phantom (Cayley fpab) = Cayley (fmap phantom fpab)