let reverse = \lst. lst (\h sofar. sofar make_list (singleton h)) empty in
; zip [a;b;c] [x; y; z] ~~> [(a,x);(b,y);(c,z)]
let zip = \left right. (\base build. reverse left build base (\x y. reverse x))
let reverse = \lst. lst (\h sofar. sofar make_list (singleton h)) empty in
; zip [a;b;c] [x; y; z] ~~> [(a,x);(b,y);(c,z)]
let zip = \left right. (\base build. reverse left build base (\x y. reverse x))