import Data.Function.YaMemo import Data.Map fibF :: (Num a, Eq a, Num b, Eq b) => (a -> b) -> a -> b fibF _ 0 = 0 fibF _ 1 = 1 fibF f n = f (n-2) + f (n-1) fib :: Integer -> Integer fib = memo (undefined :: (Memo Map) Integer Integer) fibF fib' :: Int -> Integer fib' = memo (undefined :: (Memo Map) Int Integer) fibF