Triplo de pascal de memorização

Eu não estou interessado na solução real ou outros métodos para resolver o problema, é a memoização eu preciso de ajuda com :)

Preciso de ajuda para fazer um problema no triângulo pascal com memoização. Eu quero pegar o número do meio na base do triângulo. (Projeto Euler 15)

O primeiro exemplo não é memoizado (embora o nome sugere isso) "20 20" não solucionável

A segunda tentativa é uma tentativa de fazer algo semelhante a:http://www.haskell.org/haskellwiki/Memoization

A terceira é a sugestão de sugestões no no2, se isso for mais legível para alguém.

Eu recebo este erro, mas eu não tenho certeza do seu direito, mesmo se ele compilar ... (correr de ghci com 2 2 como params

no instance for (Num [a0])
arising from a use of `zmemopascals'
Possible fix: add an instance declaration for (Num [a0])
In the expression: zmemopascals 2 2
In an equation for `it': it = zmemopascals 2 2

.

Code:
--1 
memopascals r c =  [[pascals a b | b<-[1..c]] | a<-[1..r]] !! (r-1) !! (c-1) 
 where pascals 1 _ = 1 
       pascals _ 1 = 1 
       pascals x y = memopascals (x-1) y + memopascals x (y-1) 

--2 
--xmemopascals :: Int -> Int -> Int 
xmemopascals r c =  map (uncurry pascals) (zip [1..] [1..]) !! (r-1) !! (c-1) 
 where pascals 1 _ = 1 
       pascals _ 1 = 1 
       pascals x y = memopascals (x-1) y + memopascals x (y-1) 


--3 
zmemopascals r c =  zipWith pascals [1 ..] [1 ..] !! (r-1) !! (c-1) 
 where pascals 1 _ = 1 
       pascals _ 1 = 1 
       pascals x y = memopascals (x-1) y + memopascals x (y-1)

questionAnswers(3)

yourAnswerToTheQuestion