packages feed

pandora-0.5.6: Pandora/Pattern/Functor.hs

module Pandora.Pattern.Functor (module Exports, Functor (..), Covariant_, Contravariant_, Bindable_) where

import Pandora.Pattern.Functor.Comonad as Exports
import Pandora.Pattern.Functor.Monad as Exports
import Pandora.Pattern.Functor.Representable as Exports
import Pandora.Pattern.Functor.Adjoint as Exports
import Pandora.Pattern.Functor.Extendable as Exports
import Pandora.Pattern.Functor.Bindable as Exports
import Pandora.Pattern.Functor.Distributive as Exports
import Pandora.Pattern.Functor.Traversable as Exports
import Pandora.Pattern.Functor.Monoidal as Exports
import Pandora.Pattern.Functor.Semimonoidal as Exports
import Pandora.Pattern.Functor.Invariant as Exports
import Pandora.Pattern.Functor.Contravariant as Exports
import Pandora.Pattern.Functor.Covariant as Exports

import Pandora.Pattern.Morphism.Flip (Flip)
import Pandora.Pattern.Morphism.Straight (Straight)
import Pandora.Pattern.Morphism.Kleisli (Kleisli)

-- TODO: think about prerequisites on morphisms
-- Semifunctors from Semigroupoids and Functors from Categories?
class Functor source target t where
	(-|-) :: source a b -> target (t a) (t b)

type Covariant_ source target = Functor (Straight source) (Straight target)
type Contravariant_ source target = Functor (Straight source) (Flip target)
type Bindable_ source t = Functor (Kleisli t source) (Straight source) t