让...声明在IO中不起作用?

时间:2016-07-06 18:57:11

标签: haskell

我几乎无法区分"其中"和"让.. int"声明。 这是我的代码。我想要2种方式来打印5。

main =  do
    print x
      where x = 5
    let x = 5 in print x

第一个有效,但我在输入上得到了一个解析错误' let'" 这是缩进的问题,还是我的代码明显错误?

2 个答案:

答案 0 :(得分:4)

where总是结束陈述; where之后什么都不应该发生。 所以,你可以这样写:

main = do
    let x = 5 in print x
    print x
        where x = 5

这是有效的,因为where子句结束了它应该属于的语句。您的代码无效,因为解析器希望在where x = 5之后找不到任何内容,但会发现您的let子句。

答案 1 :(得分:3)

你的代码错了。 where子句必须出现在定义的末尾,而let是一个表达式,可以在表达式有效的任何地方出现。