Comment by tmtvl
Check out Common Lisp, it's gradually typed, so if you want you can just write your code like this:
(defun fib (n)
(declare (type (Integer 0 100) n))
(the (Integer 0 *)
(if (< n 2)
n
(+ (fib (- n 1))
(fib (- n 2).)