当我希望简单地打印出一个值时,为什么ghc会给我一个解析错误?

vik*_*ata -2 parsing haskell compilation ghc

我有一个haskell文件:

main = putStrLn "hello world"
let a=1
show a
Run Code Online (Sandbox Code Playgroud)

和ghc说:

main.hs:3:1:                                                                                                                            
parse error (possibly incorrect indentation or mismatched brackets) 
Run Code Online (Sandbox Code Playgroud)

scl*_*clv 5

这里有很多问题.

首先,如果要对表达式进行排序,则IO需要将它们放在一个do块中.其次,你需要使用缩进(仅空格,没有制表符!)来分隔do块,如下所示:

main = do
   putStrLn "hello world"
   let a=1
   show a
Run Code Online (Sandbox Code Playgroud)

最后,show a将返回一个字符串,但是你想要一个IO动作来打印一个字符串,所以它应该是putStrLn (show a),或者你可以使用print a打印功能组成showing(变成一个字符串)然后打印到控制台.