packages feed

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

Pair_Polytype (X:*) (Y:*) : *p = (Data:*) -> (X -> Y -> Data) -> Data
Pair  (X:*) (Y:*) : *m = Monotype (Pair_Polytype X Y)
pair (X:*) (Y:*) (x:X) (y:Y) : Pair X Y
 = monotype (Pair_Polytype X Y)
   (λ(Data:*) (f:X -> Y -> Data) -> f x y)

uncurry (X:*) (Y:*) (Data:*) (r:X -> Y -> Data) (p:Pair X Y) : Data
 = polytype (Pair_Polytype X Y)
   p Data r
curry (X:*) (Y:*) (Data:*) (r:Pair X Y -> Data) (x:X) (y:Y)
 = r (pair X Y x y)

fst (X:*) (Y:*) (p:Pair X Y) : X
 = uncurry X Y X (λ(x:X) (y:Y) -> x) p
snd (X:*) (Y:*) (p:Pair X Y) : Y
 = uncurry X Y Y (λ(x:X) (y:Y) -> y) p
repair (X:*) (Y:*) (p:Pair X Y) : Pair X Y
 = pair X Y (fst X Y p) (snd X Y p)

first (X:*) (Y:*) (Z:*) (f:X -> Z) (p:Pair X Y) : Pair Z Y
 = uncurry X Y (Pair Z Y) (λ(x:X) (y:Y) -> pair Z Y (f x) y) p
second (X:*) (Y:*) (Z:*) (f:Y -> Z) (p:Pair X Y) : Pair X Z
 = uncurry X Y (Pair X Z) (λ(x:X) (y:Y) -> pair X Z x (f y)) p