4 import List ( genericLength, genericReplicate )
5 import System ( getArgs )
8 main = do (arg:_) <- getArgs
9 mapM_ printTriple [ (i,fib i,mfib i) | i <- [10..read arg] ]
10 where printTriple (i,fi,mfi) = do print i
15 -- There is not much point in memoising Integers, so we use unary "numbers" instead
16 mfib :: Integer -> Integer
17 mfib = genericLength . mfib' . flip genericReplicate ()
25 ufib (():n1@(():n2)) = mfib' n1 ++ mfib' n2
27 fib :: Integer -> Integer
30 fib n = fib (n-1) + fib (n-2)