【问题标题】:Haskell: parse error on input 'putStrLn'Haskell:输入'putStrLn'解析错误
【发布时间】:2013-05-28 14:53:26
【问题描述】:

我刚刚编写了我的第一个 Haskell 程序,但是有一个我无法理解的错误。我认为这是正确的,因为我只是像书中的示例一样编写它。谁能帮帮我?

main = do
    putStrLn "Hello, what's your name?"
    name <- getLine
    putStrLn ("Hey" ++ name ++ ", nice to meet you!")

错误信息是:

输入“putStrLn”解析错误

这很奇怪。

【问题讨论】:

  • 检查您的空格以确保其中没有制表符(参见例如this question)。
  • 天啊!非常感谢!有用!我认为这有点棘手。 :D
  • 顺便说一句:这看起来不像是完整的错误消息。 GHC 错误有一个行号和列号。对于拥有该信息的人(包括您!)来说,这会更容易,因此请确保您始终包含完整的错误消息。 :-)
  • 大多数编辑器允许用空格代替制表符。在编写 Haskell 或任何对空格敏感的语言时,最好打开它。
  • 默认情况下,当 GHC 在源文件中找到 any 选项卡时会发出警告。

标签: haskell parse-error


【解决方案1】:

虽然无法从您发布的代码中分辨出来,因为 SO 至少在某些时候会将制表符转换为空格,但问题可能是您在 putStrLn 之前输入了一个文字制表符字符,而不是像您为另一个输入的四个空格do 块中的两行,反之亦然。

do 块中的所有语句必须以完全相同的空格开头,而不仅仅是看起来排列整齐。如果您正在使用可以以特殊方式显示文字选项卡的文本编辑器,请将其设置为这样做;它会为您省去一些麻烦。

【讨论】:

  • 是的,这就是问题所在。我写的时候真的没有注意到这一点。你的回答真的很有帮助。谢谢!
  • @Mel :实际上,在缩进多行时,您可以将制表符和空格进行各种组合;这里重要的是the Haskell Report 指定制表符计为 8 个空格,而不是 4 个,因为您似乎设置了编辑器。
猜你喜欢
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
  • 2016-01-11
  • 1970-01-01
  • 2018-05-02
相关资源
最近更新 更多