Por que o ghc infernta o tipo de `io b` para uma aplicação de` hsetbuffering`?

StackOverflow https://stackoverflow.com/questions/2349922

  •  23-09-2019
  •  | 
  •  

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.

Foi útil?

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