Por que o ghc infernta o tipo de `io b` para uma aplicação de` hsetbuffering`?
Pergunta
Estou tentando usar hSetBuffering
em um programa Haskell usando o GHC 6.10. Quando tento este programa muito simples:
module Ctlc
where
import IO
main :: ()
main = do hSetBuffering stdout NoBuffering
return ()
Eu recebo uma mensagem de erro desconcertante:
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 ()
Eu não entendo Por quê GHC está inferindo um tipo de IO b
, desde que a GHCI afirma
Prelude Data.List IO> :t hSetBuffering
hSetBuffering :: Handle -> BufferMode -> IO ()
RESPONDA: Eu estupidamente coloquei o tipo errado em main
. Obrigado JA Para olhos afiados.
Solução
Você declarou main para ser do tipo (), não io ().
Outras dicas
Essa função precisa ter algum tipo de IO, porque a implementação fará uma chamada do sistema.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow