[Haskell-beginners] Re: Forcing evalation in the IO Monad
Philip Scott
haskell-beginners at foo.me.uk
Fri Apr 16 11:00:57 EDT 2010
Daniel Fischer wrote:
> Am Freitag 16 April 2010 16:25:08 schrieb Heinrich Apfelmus:
>
>> Philip Scott wrote:
>>
>>> What I want is something like putStrLn that doesn't print anything,
>>> and takes any type as its input, evaluates it to normal form and then
>>> does nothing else. It might be called something like 'evaluate' have a
>>> type like this
>>>
>>> evaluate :: a -> IO()
>>>
>> With Hoogle, you can search for types:
>>
>> http://haskell.org/hoogle/?hoogle=a+-%3E+IO+%28%29
>>
>> 12th result from the top.
>>
>
> That evaluates only to WHNF.
>
> Control.DeepSeq.rnf seems to be closer, but requires NFData instances.
>
>
The documentation says that, but it does appear to go deeper than just
one level:
Debug.Trace Prelude Control.Exception> let a = trace "Hello" 42
Debug.Trace Prelude Control.Exception> let b = trace "Frank" (a * 2)
Debug.Trace Prelude Control.Exception> evaluate b
Frank
Hello
84
Perhaps it specifies WHNF in case you 'evaluate' something which doesn't
have a HNF (like a partially applied function?).
- Philip
More information about the Beginners
mailing list