list haskell

Evaluación de la lista a la forma normal de cabeza débil



haskell (1)

Creo que el comentario de este bheklilr debería ser marcado como la respuesta:

¿Cuál es el tipo de x? Si es (Num a, Enum a) => [a] entonces esto no funcionará como se esperaba. Pruebe con let x = [1..100] :: [Int ]. En realidad, cuando imprime x con el tipo más general, GHCi se especializa en Integer para hacer la impresión. Esto significa que los valores que ve impresos no se almacenan realmente en el procesador de x. El uso de un tipo concreto evita este problema.

Con la nota adicional de David Young de que este problema no se producirá en versiones de GHCi anteriores a 7.8, cuando se habilitó la restricción de monomorfismo.

Dada la siguiente lista del 1 al 100:

> let x = [1..100]

Ejecuto sprint x para observar su valor no evaluado.

> :sprint x x = _

Luego, ejecuté seq para evaluar la forma normal de cabeza débil:

> seq x () ()

Pero volver a ejecutar sprint x shows ( lo que creo ) es el mismo valor.

> :sprint x x = _

¿Porqué es eso?