let map = \f lst. lst (\h sofar. make_list (f h) sofar) empty in
let filter = \f lst. lst (\h sofar. f h (make_list h sofar) sofar) empty in ; or
let filter = \f lst. lst (\h. f h (make_list h) I) empty in
+ let reverse = \lst. lst (\h t. t make_list (\f n. f h n)) empty in
; version 1 lists