Памятка с рекурсией

Я пытаюсь понятьHaskell реализация памятных , но я не понимаю, как это работает:

memoized_fib :: Int -> Integer
memoized_fib = (map fib [0..] !!)
    where fib 0 = 0
              fib 1 = 1
              fib n = memoized_fib(n - 2) + memoized_fib(n - 1)

Прежде всего, я даже не понимаю, почему функция 'map' получает три параметра (function - fib, list [0 ..] и ||), а не два, как это должно быть.

Обновлено:

Я попытался переписать код, но получить другой результат:

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

Почему? Есть ли какая-либо ошибка в моих рассуждениях?

Ответы на вопрос(3)

Ваш ответ на вопрос