{-- 
What is the value of fibo really?

That's a problem, isn't it, because fibo is in exponential time if defined
doubly-recursively. But here's the thing: if you know F(n) you already know
F(n-1) ... so why recompute that subtree when you've already just computed it

So, use that knowledge. Retain it. Define a fibonacci function that returns
the fibonacci at n in linear time by retaining the previous [0..n-1] fibonacci
numbers. This is what we call dynamic programming.
--}

fibr :: [Integer] -> Integer -> Integer
fibr fibs n = undefined
fibr :: [Integer] -> Integer -> Integer
fibr fibs n = undefined
fibr fibs n = undefined