       curr)))
 
 (defn fibo-trampoline
-  [n]
-  (letfn [(fibs [curr next n]
+  [^long n]
+  (letfn [(fibs [curr next ^long n]
             (if-not (zero? n)
               #(fibs next (+ curr next) (dec n))
               curr))]

    (run-bench (fibo-volatile n))
    (run-bench (fibo-with-type n))
    (run-bench (fibo-with-java n))
    #_(perf/quick-bench (fibo-lazy-cat n))
    ))

(set! *warn-on-reflection* true)

(defn fibo-iterate
  [^long n]
  (let [next-fib (fn [[a b]] [b (+ a b)])
        fibs (iterate next-fib [0N 1N])]
    (first (nth fibs n))))

(defn fibo-lazy-seq
  [^long n]
  (letfn [(fibs [a b] (cons a (lazy-seq (fibs b (+ a b)))))]
    (nth (fibs 0N 1N) n)))

(defn fibo-recur
  [^long n]
  (loop [curr 0N
         next 1N
         n n]
