packages feed

lol-calculus-1.20160822: Language/LOL/Calculus/lib/Monoid.lol

Monoid_Mempty  (M:*) = M
Monoid_Mappend (M:*) = M -> M -> M

Monoid_Class
 (M:*) (Data:*)
 =  (mempty:Monoid_Mempty M)
 -> (mappend:Monoid_Mappend M)
 -> Data
Monoid_Polytype
 (M:*) : *p
 = (Data:*) -> Monoid_Class M Data -> Data
Monoid
 (M:*) : *m
 = Monotype (Monoid_Polytype M)

monoid
 (M:*)
 (mempty:Monoid_Mempty M)
 (mappend:Monoid_Mappend M)
 : Monoid M
 = monotype (Monoid_Polytype M)
    (λ(Data:*) (monoid_class:Monoid_Class M Data) ->
      monoid_class mempty mappend)
unMonoid
 (M:*) (Data:*)
 (monoid_class:Monoid_Class M Data)
 (monoid:Monoid M)
 : Data
 = polytype (Monoid_Polytype M) monoid Data monoid_class

Monoid_mempty
 (M:*) (monoid:Monoid M)
 : Monoid_Mempty M
 = unMonoid M (Monoid_Mempty M)
    (λ(mempty:Monoid_Mempty M) (mappend:Monoid_Mappend M) -> mempty)
    monoid
Monoid_mappend
 (M:*) (monoid:Monoid M)
 : Monoid_Mappend M
 = unMonoid M (Monoid_Mappend M)
    (λ(mempty:Monoid_Mempty M) (mappend:Monoid_Mappend M) -> mappend)
    monoid