;; tail recursive reverse
(bind-func reverse:[List{!a}*,List{!a}*]*
(lambda (lst)
(let ((rev (lambda (old new)
(if (Nil$ lst () #t #f)
rlst
(rev (Cons$ old (x xs) xs (Nil))
(Cons$ old (x xs)
(Cons x new)
(Nil)))))))
(rev lst (Nil)))))