Это прекрасно, чтобы запомнить генератор функций. Впрочем, отрицательный индекс - это ошибка. Я отредактирую свой ответ.

аюсь запомнить следующую функцию:

gridwalk x y
    | x == 0 = 1
    | y == 0 = 1
    | otherwise = (gridwalk (x - 1) y) + (gridwalk x (y - 1))

Смотря наэто Я придумал следующее решение:

gw :: (Int -> Int -> Int) -> Int -> Int -> Int
gw f x y
    | x == 0 = 1
    | y == 0 = 1
    | otherwise = (f (x - 1) y) + (f x (y - 1))

gwlist :: [Int]
gwlist = map (\i -> gw fastgw (i `mod` 20) (i `div` 20)) [0..]

fastgw :: Int -> Int -> Int
fastgw x y = gwlist !! (x + y * 20)

Который я тогда могу назвать так:

gw fastgw 20 20

Существует ли более простой, краткий и общий способ (обратите внимание, как мне пришлось жестко задавать максимальные размеры сетки вgwlist функция для того, чтобы преобразовать из 2D в 1D пространство, чтобы я мог получить доступ к списку запоминания), чтобы запоминать функции с несколькими параметрами в Haskell?