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