为什么错误" do {...}中的最后一个生成器必须是表达式"发生?

时间:2018-05-01 13:40:51

标签: haskell functional-programming

我是Haskell的新手,在haskell中编写一个小代码时,我遇到了一个名为

的错误
Last generator in do {...} must be an expression

我努力删除此错误但失败了。

我为这个错误访问了堆栈溢出,我发现但答案太大而复杂,所以我无法理解。

It is the link where I found about this error

我的代码是

main = do
    putStrLn "What is your name?"
    name <- getLine
    putStrLn ("Name of customer is "++ name)

任何人都可以帮助我,因此可以解决此错误,并且必须感谢您的帮助

1 个答案:

答案 0 :(得分:6)

在您的原始问题中,您的四行有这些缩进:

  1. 四个空格
  2. 四个空格
  3. 一个标签
  4. 一个标签
  5. 猜测,StackOverflow&#34;插入代码&#34;插入了(1)的缩进。按钮,所以你的原始来源可能有这个缩进:

    1. 零空间
    2. 四个空格
    3. 一个标签
    4. 一个标签
    5. GHC将制表符视为扩展为八空格式制表符,但do块中的每一行必须相互对齐(对于初学者,应缩进比封闭块更深)。因此,我建议使用以下两种解决方案之一:

      1. 零空间
      2. 一个标签
      3. 一个标签
      4. 一个标签
      5. OR

        1. 零空间
        2. 四个空格
        3. 四个空格
        4. 四个空格
        5. 以下内容也适用(并且是最合理的指标对原始内容的最小编辑),但我强烈建议不要这样做。

          1. 零空间
          2. 八个空格
          3. 一个标签
          4. 一个标签
          5. 有关空白样式的进一步讨论,请参阅Why shouldn't I mix tabs and spaces?