
Hi folks, This question is so trivial it must have been answered before, but I have been googling all morning to no avail so please bear with me. I've been wading through mires of $! and seq, deepSeq, $!! etc.. and I have leaned a lot of useful stuff about lazy evaluation - but I haven't been able to solve my problem.. What I would like to do is to force an expression to be fully evaluated to normal form, from inside the IO monad, right there and then. For example, in GHCI, calling putStrLn does just what I want: Debug.Trace Prelude> let a = trace "Hello" 42 Debug.Trace Prelude> putStrLn $ show a Hello 42 Except that it only takes showable things, and it puts an annoying message on the screen. 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() It _must_ exist - and it _must_ be easier to find this sort of thing than I am making it, or else how did all you haskell gurus attain your status? Am I missing something :) All the best, Philip