lol-calculus-1.20160822: Language/LOL/Calculus/lib/Functor.lol
Functor_Fmap
(F:* -> *) (X:*) (Y:*)
= (X -> Y) -> F X -> F Y
Functor_Class
(F:* -> *) (Data:*)
= (fmap:∀(X:*) -> ∀(Y:*) -> Functor_Fmap F X Y)
-> Data
Functor_Polytype
(F:* -> *) : *p
= (Data:*) -> Functor_Class F Data -> Data
Functor
(F:* -> *) : *m
= Monotype (Functor_Polytype F)
functor
(F:* -> *)
(fmap:∀(X:*) -> ∀(Y:*) -> Functor_Fmap F X Y)
: Functor F
= monotype (Functor_Polytype F)
(λ(Data:*) (functor_class:Functor_Class F Data) -> functor_class fmap)
unFunctor
(F:* -> *) (Data:*)
(functor_class:Functor_Class F Data)
(functor:Functor F)
: Data
= polytype (Functor_Polytype F) functor Data functor_class
Functor_fmap
(F:* -> *) (functor:Functor F) (X:*) (Y:*)
: Functor_Fmap F X Y
= unFunctor F (Functor_Fmap F X Y)
(λ(fmap:∀(X:*) -> ∀(Y:*) -> Functor_Fmap F X Y) -> fmap X Y)
functor