let singleton = \x f z. f x z in
let reverse = \lst. lst (\h sofar. sofar make_list (singleton h)) empty in
let zip = \left right. left (\h sofar. sofar (\x y. isempty y
- sofar
- (make_pair (make_list () x) (tail y))
+ sofar
+ (make_pair (make_list (\u v. head y (u v) h) x) (tail y))
)
(make_pair empty (map right (\h u v. u v h)))
)