packages feed

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

Ordering_Polytype : *p
 = (Data:*) -> (Lt:Data) -> (Eq:Data) -> (Gt:Data) -> Data
Ordering : *m = Monotype Ordering_Polytype

Ord_Lt : Ordering = monotype Ordering_Polytype (λ(Data:*) (Lt:Data) (Eq:Data) (Gt:Data) -> Lt)
Ord_Eq : Ordering = monotype Ordering_Polytype (λ(Data:*) (Lt:Data) (Eq:Data) (Gt:Data) -> Eq)
Ord_Gt : Ordering = monotype Ordering_Polytype (λ(Data:*) (Lt:Data) (Eq:Data) (Gt:Data) -> Gt)

:load Eq.lol

Ord_Compare (X:*) = X -> X -> Ordering

Ord_Class
 (X:*) (Data:*)
 =  (eq:Eq X)
 -> (compare:Ord_Compare X)
 -> Data
Ord_Polytype
 (X:*) : *p
 = (Data:*) -> Ord_Class X Data -> Data
Ord
 (X:*) : *m
 = Monotype (Ord_Polytype X)

ord
 (X:*)
 (eq:Eq X)
 (compare:Ord_Compare X)
 : Ord X
 = monotype (Ord_Polytype X)
    (λ(Data:*) (ord_class:Ord_Class X Data) ->
      ord_class eq compare)
unOrd
 (X:*) (Data:*)
 (ord_class:Ord_Class X Data)
 (ord:Ord X)
 : Data
 = polytype (Ord_Polytype X) ord Data ord_class

Ord_eq
 (X:*) (ord:Ord X)
 : Eq X
 = unOrd X (Eq X)
    (λ(eq:Eq X) (compare:Ord_Compare X) -> eq)
    ord
Ord_compare
 (X:*) (ord:Ord X)
 : Ord_Compare X
 = unOrd X (Ord_Compare X)
    (λ(eq:Eq X) (compare:Ord_Compare X) -> compare)
    ord