¿Cuándo es automática la memorización en GHC Haskell?

No puedo entender por qué aparentemente se memoriza m1 mientras que m2 no está en lo siguiente:

m1      = ((filter odd [1..]) !!)

m2 n    = ((filter odd [1..]) !! n)

m1 10000000 tarda aproximadamente 1,5 segundos en la primera llamada, y una fracción de eso en las llamadas posteriores (presumiblemente almacena en caché la lista), mientras que m2 10000000 siempre toma la misma cantidad de tiempo (reconstruir la lista con cada llamada). ¿Tienes idea de lo que está pasando? ¿Hay alguna regla general en cuanto a si y cuándo GHC memorizará una función? Gracias.

Respuestas a la pregunta(4)

Su respuesta a la pregunta