packages feed

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