In Haskell, is it possible to test if a value has been evaluated to weak head normal form? If a function already exists, I would expect it to have a signature like
evaluated :: a -> IO Bool
There are a few places that similar functionality lives.
A previous answer introduced me to the :sprint
ghci command, which will print only the portion of a value that has already been forced to weak head normal form. :sprint
can observe whether or not a value has been evaluated:
> let l = ['a'..]
> :sprint l
l = _
> head l
'a'
> :sprint l
l = 'a' : _
It's possible in IO
to examine properties that would otherwise be off-limits. For example, it's possible to compare in IO
to see if two values came from the same declaration. This is provided by the StableName
s in System.Mem.StableName
and used famously to solve the observable sharing problem in data-reify. The related StablePtr
does not provide a mechanism to check if the referenced value is in weak head normal form.