packages feed

deep-transformations-0.1: src/Transformation/Deep.hs-boot

{-# Language MultiParamTypeClasses, RankNTypes, TypeFamilies #-}

module Transformation.Deep where

import Data.Functor.Compose (Compose)
import Data.Functor.Const (Const)
import qualified Rank2
import           Transformation (Transformation, Domain, Codomain)

import Prelude hiding (Functor, Foldable, Traversable, (<$>), foldMap, traverse)

class (Transformation t, Rank2.Functor (g (Domain t))) => Functor t g where
   (<$>) :: t -> g (Domain t) (Domain t) -> g (Codomain t) (Codomain t)

class (Transformation t, Rank2.Foldable (g (Domain t))) => Foldable t g where
   foldMap :: (Codomain t ~ Const m, Monoid m) => t -> g (Domain t) (Domain t) -> m

class (Transformation t, Rank2.Traversable (g (Domain t))) => Traversable t g where
   traverse :: Codomain t ~ Compose m f => t -> g (Domain t) (Domain t) -> m (g f f)