views:

178

answers:

2

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.

A: 

That function has to have some IO type, because the implementation is going to do a system call.

Andrew McGregor
+8  A: 

You've declared main to be of type (), not IO ().

ja
Thank you **so** much. Definitely pilot error between the keyboard and the chair. +1, and I obviously need to think about going to bed...
Norman Ramsey