Memoization pascals triangle

No estoy interesado en la solución real u otros métodos para resolver el problema, es la memoria en la que necesito ayuda :)

Necesito ayuda para resolver un problema de triángulos de pascales con la memoria. Quiero obtener el número del medio en la base del triángulo. (Proyecto Euler 15)

El primer ejemplo no está memorizado (aunque el nombre lo sugiere) "20 20" no solucionable

El segundo intento es un intento de hacer algo similar a:http://www.haskell.org/haskellwiki/Memoization

La tercera es la sugerencia de hlints sobre no2 si es más legible para alguien.

Recibo este error, pero no estoy seguro de que sea correcto aunque compile ... (se ejecuta desde ghci con 2 2 como parámetros

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)

Respuestas a la pregunta(3)

Su respuesta a la pregunta