[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