extended-categories-0.1.0: Extended Categories

Safe HaskellNone
LanguageHaskell2010

Functor

Synopsis

Documentation

class (Category (Domain f :: o1 -> o1 -> *), Category (Codomain f :: o2 -> o2 -> *)) => Functor f k | f -> k where Source

The class of functors f from Domain f to Codomain f. Rather than indexing functors on the type of their object mapping, Functor is indexed on the phantom type variable f. This allows the object mapping to be any type family FMap f, and for multiple functors to exist between categories. As a consequence, a proxy k for the kind of FMap f must be given as a second parameter to Functor.

Associated Types

type FMap f a :: o2 Source

The mapping of objects of Domain f to objects of Codomain f.

type Domain f :: o1 -> o1 -> * Source

The domain of f.

type Codomain f :: o2 -> o2 -> * Source

The codomain of f.

Methods

morphMap :: Tagged f (Domain f (a :: o1) (b :: o1) -> Codomain f (FMap f a :: o2) (FMap f b :: o2)) Source

The mapping of morphisms of Domain f to morphisms of Codomain f, tagged on the type f.

Instances

Functor f => Functor * * (CanonicalF f) (KProxy (* -> *)) 
Category k c => Functor k k (IdentityF k c) (KProxy (k -> k)) 
(Functor o2 o3 f (KProxy (o2 -> o3)), Functor o1 o2 g (KProxy (o1 -> o2)), (~) (o2 -> o2 -> *) (Domain o2 f) (Codomain o2 g)) => Functor o1 o3 (Comp o2 (KProxy o2) f g) (KProxy (o1 -> o3)) 
Category k c => Functor k ((,) k k) (Diag k c) (KProxy (k -> (,) k k)) 
ProductCategory k c => Functor ((,) k k) k (ProductF k c) (KProxy ((,) k k -> k)) 
(Category o1 c1, Category o2 c2, Category o3 c3) => Functor ((,) * *) * (CompFF o1 o2 o3 c1 c2 c3) (KProxy ((,) * * -> *)) 

objectMap :: forall f a. Functor f (KProxy :: KProxy (o1 -> o2)) => Tagged `(f, a)` (Object (Domain f) a :- Object (Codomain f) (FMap f a :: o2)) Source

Proof that functors map objects to objects. Defines a functor from Cat to (:-).

fmap :: forall f a b. Functor f (KProxy :: KProxy (o1 -> o2)) => f -> Domain f a b -> Codomain f (FMap f a :: o2) (FMap f b :: o2) Source

data Comp k f g where Source

The composition of functors. The type variable k is a proxy for the kind of the objects of the codomain of g.

Constructors

(:.:) :: (Functor f (KProxy :: KProxy (o2 -> o3)), Functor g (KProxy :: KProxy (o1 -> o2)), (Domain f :: o2 -> o2 -> *) ~ Codomain g) => f -> g -> Comp (KProxy :: KProxy o2) f g 

Instances

(Functor o2 o3 f (KProxy (o2 -> o3)), Functor o1 o2 g (KProxy (o1 -> o2)), (~) (o2 -> o2 -> *) (Domain o2 f) (Codomain o2 g)) => Functor o1 o3 (Comp o2 (KProxy o2) f g) (KProxy (o1 -> o3)) 
type FMap k k1 (Comp o2 (KProxy o2) f g) a = FMap o2 k1 f (FMap k o2 g a) 
type Domain k (Comp k1 (KProxy k1) f g) = Domain k g 
type Codomain k (Comp k1 (KProxy k1) f g) = Codomain k f 

data IdentityF c where Source

The identity functor.

Constructors

IdentityF :: Category c => IdentityF c 

Instances

Category k c => Functor k k (IdentityF k c) (KProxy (k -> k)) 
type FMap k k (IdentityF k c) a = a 
type Domain k (IdentityF k c) = c 
type Codomain k (IdentityF k c) = c 

data CanonicalF f where Source

Functors derived from Prelude's Functor.

Constructors

CanonicalF :: Functor f => CanonicalF f 

Instances

Functor f => Functor * * (CanonicalF f) (KProxy (* -> *)) 
type FMap * * (CanonicalF f) a = f a 
type Domain * (CanonicalF f) = (->) 
type Codomain * (CanonicalF f) = (->)