Here is my code for the calculating fibonacci numbers:

```
f' :: (Int -> Int) -> Int -> Int
f' mf 0 = 0
f' mf 1 = 1
f' mf n = mf(n - 2) + mf(n - 1)

f'_list :: [Int]
f'_list = map (f' faster_f') [0..]

faster_f' :: Int -> Int
faster_f' n = f'_list !! n

```

It works fine while 'n' is small. To resolve the problem with big numbers I would like convert Int-type to Integer:

```
f' :: (Integer -> Integer) -> Integer -> Integer
f' mf 0 = 0
f' mf 1 = 1
f' mf n = mf(n - 2) + mf(n - 1)

f'_list :: [Integer]
f'_list = map (f' faster_f') [0..]

faster_f' :: Integer -> Integer
faster_f' n = f'_list !! n

```

With this code I get the error:

```
Couldn't match expected type `Int' with actual type `Integer'
In the second argument of `(!!)', namely `n'
In the expression: f'_list !! n
In an equation for `faster_f'': faster_f' n = f'_list !! n

```

Well, I have understood correctly the index of element in the list can not be Integer-type.
OK:

```
f' :: (Integer -> Integer) -> Integer -> Integer
f' mf 0 = 0
f' mf 1 = 1
f' mf n = mf(n - 2) + mf(n - 1)

f'_list :: [Integer]
f'_list = map (f' faster_f') [0..]

faster_f' :: **Int** -> Integer
faster_f' n = f'_list !! n

```

But now I get the error:

> 
> Couldn't match expected type `Integer' with actual type`Int'
>  Expected type: Integer -> Integer
> 
> 
> 
> ```
>   Actual type: Int -> Integer
> In the first argument of `f'', namely `faster_f''
> In the first argument of `map', namely `(f' faster_f')'
> 
> ```
> 
> 

Why? And how can I fix it?