Probar si un valor ha sido evaluado en forma normal de cabeza débil
En Haskell, ¿es posible probar si un valor ha sido evaluado en forma normal de cabeza débil? Si ya existe una función, esperaría que tuviera una firma como
evaluated :: a -> IO Bool
Hay algunos lugares donde vive una funcionalidad similar.
A respuesta previa me presentó a la:sprint
Comando ghci, que imprimirá solo la parte de un valor que ya se ha forzado a la forma normal de la cabeza débil.:sprint
puede observar si un valor ha sido evaluado o no:
> let l = ['a'..]
> :sprint l
l = _
> head l
'a'
> :sprint l
l = 'a' : _
Es posible enIO
para examinar propiedades que de otro modo estarían fuera de los límites. Por ejemplo, es posible comparar enIO
para ver si dos valores provienen de la misma declaración. Esto es proporcionado por elStableName
pecadoSystem.Mem.StableName
y usado famoso para resolver el problema de compartir observable enReify de datos. El relacionadoStablePtr
no proporciona un mecanismo para verificar si el valor referenciado está en forma normal de cabeza débil.