;; this map is NOT tail optimized
(bind-func map:[List{!a}*,[!a,!b]*,List{!b}*]*
(lambda (func xs)
(let ((f (lambda (l)
(if (null? l)
null
(cons (func (car l)) (f (cdr l)))))))
(f xs))))