;; 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))))