compdata-0.12: Compositional Data Types

Copyright(c) 2011 Patrick Bahr
LicenseBSD3
MaintainerPatrick Bahr <paba@diku.dk>
Stabilityexperimental
Portabilitynon-portable (GHC Extensions)
Safe HaskellSafe
LanguageHaskell98

Data.Comp.Multi.HFunctor

Description

This module defines higher-order functors (Johann, Ghani, POPL '08), i.e. endofunctors on the category of endofunctors.

Synopsis
  • class HFunctor h where
    • type (:->) f g = forall i. f i -> g i
    • type (:=>) f a = forall i. f i -> a
    • type NatM m f g = forall i. f i -> m (g i)
    • newtype I a = I {}
    • newtype K a i = K {}
    • data A f = A {
      • unA :: forall i. f i
      }
    • data E f = E {}
    • runE :: (f :=> b) -> E f -> b
    • data (f :.: (g :: (* -> *) -> * -> *)) (e :: * -> *) t = Comp (f (g e) t)

    Documentation

    class HFunctor h where Source #

    This class represents higher-order functors (Johann, Ghani, POPL '08) which are endofunctors on the category of endofunctors.

    Minimal complete definition

    hfmap

    Methods

    hfmap :: (f :-> g) -> h f :-> h g Source #

    A higher-order functor f also maps a natural transformation g :-> h to a natural transformation f g :-> f h

    Instances
    HFunctor f => HFunctor (Cxt h f) Source # 
    Instance details

    Defined in Data.Comp.Multi.Term

    Methods

    hfmap :: (f0 :-> g) -> Cxt h f f0 :-> Cxt h f g Source #

    Functor f => HFunctor (Compose f :: (* -> *) -> * -> *) Source # 
    Instance details

    Defined in Data.Comp.Multi.HFunctor

    Methods

    hfmap :: (f0 :-> g) -> Compose f f0 :-> Compose f g Source #

    HFunctor f => HFunctor (f :&: a) Source # 
    Instance details

    Defined in Data.Comp.Multi.Ops

    Methods

    hfmap :: (f0 :-> g) -> (f :&: a) f0 :-> (f :&: a) g Source #

    (HFunctor f, HFunctor g) => HFunctor (f :+: g) Source # 
    Instance details

    Defined in Data.Comp.Multi.Ops

    Methods

    hfmap :: (f0 :-> g0) -> (f :+: g) f0 :-> (f :+: g) g0 Source #

    type (:->) f g = forall i. f i -> g i infixr 0 Source #

    This type represents natural transformations.

    type (:=>) f a = forall i. f i -> a infixr 0 Source #

    This type represents co-cones from f to a. f :=> a is isomorphic to f :-> K a

    type NatM m f g = forall i. f i -> m (g i) Source #

    newtype I a Source #

    The identity Functor.

    Constructors

    I 

    Fields

    Instances
    Functor I Source # 
    Instance details

    Defined in Data.Comp.Multi.HFunctor

    Methods

    fmap :: (a -> b) -> I a -> I b #

    (<$) :: a -> I b -> I a #

    Foldable I Source # 
    Instance details

    Defined in Data.Comp.Multi.HFunctor

    Methods

    fold :: Monoid m => I m -> m #

    foldMap :: Monoid m => (a -> m) -> I a -> m #

    foldr :: (a -> b -> b) -> b -> I a -> b #

    foldr' :: (a -> b -> b) -> b -> I a -> b #

    foldl :: (b -> a -> b) -> b -> I a -> b #

    foldl' :: (b -> a -> b) -> b -> I a -> b #

    foldr1 :: (a -> a -> a) -> I a -> a #

    foldl1 :: (a -> a -> a) -> I a -> a #

    toList :: I a -> [a] #

    null :: I a -> Bool #

    length :: I a -> Int #

    elem :: Eq a => a -> I a -> Bool #

    maximum :: Ord a => I a -> a #

    minimum :: Ord a => I a -> a #

    sum :: Num a => I a -> a #

    product :: Num a => I a -> a #

    Traversable I Source # 
    Instance details

    Defined in Data.Comp.Multi.HFunctor

    Methods

    traverse :: Applicative f => (a -> f b) -> I a -> f (I b) #

    sequenceA :: Applicative f => I (f a) -> f (I a) #

    mapM :: Monad m => (a -> m b) -> I a -> m (I b) #

    sequence :: Monad m => I (m a) -> m (I a) #

    newtype K a i Source #

    The parametrised constant functor.

    Constructors

    K 

    Fields

    Instances
    Functor (K a) Source # 
    Instance details

    Defined in Data.Comp.Multi.HFunctor

    Methods

    fmap :: (a0 -> b) -> K a a0 -> K a b #

    (<$) :: a0 -> K a b -> K a a0 #

    Foldable (K a) Source # 
    Instance details

    Defined in Data.Comp.Multi.HFunctor

    Methods

    fold :: Monoid m => K a m -> m #

    foldMap :: Monoid m => (a0 -> m) -> K a a0 -> m #

    foldr :: (a0 -> b -> b) -> b -> K a a0 -> b #

    foldr' :: (a0 -> b -> b) -> b -> K a a0 -> b #

    foldl :: (b -> a0 -> b) -> b -> K a a0 -> b #

    foldl' :: (b -> a0 -> b) -> b -> K a a0 -> b #

    foldr1 :: (a0 -> a0 -> a0) -> K a a0 -> a0 #

    foldl1 :: (a0 -> a0 -> a0) -> K a a0 -> a0 #

    toList :: K a a0 -> [a0] #

    null :: K a a0 -> Bool #

    length :: K a a0 -> Int #

    elem :: Eq a0 => a0 -> K a a0 -> Bool #

    maximum :: Ord a0 => K a a0 -> a0 #

    minimum :: Ord a0 => K a a0 -> a0 #

    sum :: Num a0 => K a a0 -> a0 #

    product :: Num a0 => K a a0 -> a0 #

    Traversable (K a) Source # 
    Instance details

    Defined in Data.Comp.Multi.HFunctor

    Methods

    traverse :: Applicative f => (a0 -> f b) -> K a a0 -> f (K a b) #

    sequenceA :: Applicative f => K a (f a0) -> f (K a a0) #

    mapM :: Monad m => (a0 -> m b) -> K a a0 -> m (K a b) #

    sequence :: Monad m => K a (m a0) -> m (K a a0) #

    KShow (K ()) Source # 
    Instance details

    Defined in Data.Comp.Multi.Show

    Methods

    kshow :: K () i -> K String i Source #

    KShow (K String) Source # 
    Instance details

    Defined in Data.Comp.Multi.Show

    Methods

    kshow :: K String i -> K String i Source #

    Eq a => KEq (K a) Source # 
    Instance details

    Defined in Data.Comp.Multi.Equality

    Methods

    keq :: K a i -> K a j -> Bool Source #

    Ord a => KOrd (K a) Source # 
    Instance details

    Defined in Data.Comp.Multi.Ordering

    Methods

    kcompare :: K a i -> K a j -> Ordering Source #

    Eq a => Eq (K a i) Source # 
    Instance details

    Defined in Data.Comp.Multi.HFunctor

    Methods

    (==) :: K a i -> K a i -> Bool #

    (/=) :: K a i -> K a i -> Bool #

    Ord a => Ord (K a i) Source # 
    Instance details

    Defined in Data.Comp.Multi.HFunctor

    Methods

    compare :: K a i -> K a i -> Ordering #

    (<) :: K a i -> K a i -> Bool #

    (<=) :: K a i -> K a i -> Bool #

    (>) :: K a i -> K a i -> Bool #

    (>=) :: K a i -> K a i -> Bool #

    max :: K a i -> K a i -> K a i #

    min :: K a i -> K a i -> K a i #

    data A f Source #

    Constructors

    A 

    Fields

    • unA :: forall i. f i
       

    data E f Source #

    Constructors

    E 

    Fields

    Instances
    KEq a => Eq (E a) # 
    Instance details

    Defined in Data.Comp.Multi.Equality

    Methods

    (==) :: E a -> E a -> Bool #

    (/=) :: E a -> E a -> Bool #

    KOrd f => Ord (E f) # 
    Instance details

    Defined in Data.Comp.Multi.Ordering

    Methods

    compare :: E f -> E f -> Ordering #

    (<) :: E f -> E f -> Bool #

    (<=) :: E f -> E f -> Bool #

    (>) :: E f -> E f -> Bool #

    (>=) :: E f -> E f -> Bool #

    max :: E f -> E f -> E f #

    min :: E f -> E f -> E f #

    runE :: (f :=> b) -> E f -> b Source #

    data (f :.: (g :: (* -> *) -> * -> *)) (e :: * -> *) t infixl 5 Source #

    This data type denotes the composition of two functor families.

    Constructors

    Comp (f (g e) t)