(bind-func foldr:[!b,[!b,!a,!b]*,!b,List{!a}*]*
  (lambda (fn end lst)
    (let ((fold (lambda (l r) ; list result
                  (if (null? l)
                      r
                      (fold (cdr l) (fn (car l) r))))))
      (fold (reverse lst) end))))