Why does GHC infer type of `IO b` for an application of `hSetBuffering`?
Question
I am trying to use hSetBuffering
in a Haskell program using GHC 6.10.
When I try this very simple program:
module Ctlc
where
import IO
main :: ()
main = do hSetBuffering stdout NoBuffering
return ()
I get a baffling error message:
ctlc.hs:8:10:
Couldn't match expected type `()' against inferred type `IO b'
In a stmt of a 'do' expression: hSetBuffering stdout NoBuffering
In the expression:
do hSetBuffering stdout NoBuffering
return ()
In the definition of `main':
main = do hSetBuffering stdout NoBuffering
return ()
I don't get why GHC is inferring a type of IO b
, since ghci claims
Prelude Data.List IO> :t hSetBuffering
hSetBuffering :: Handle -> BufferMode -> IO ()
ANSWER: I stupidly put the wrong type on main
. Thanks ja for sharp eyes.
Solution
You've declared main to be of type (), not IO ().
OTHER TIPS
That function has to have some IO type, because the implementation is going to do a system call.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow