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.

Was it helpful?

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
scroll top