【发布时间】:2013-04-06 14:59:34
【问题描述】:
下面的代码被编程来决定 Haskell 中剪刀石头布的结果,但是终端给出错误
data Move = Paper | Rock | Scissors
deriving (Eq, Show)
data Result = Win | Draw | Loose
deriving (Eq, Show)
beats :: Move -> Move
beats move = case move of
Paper -> Scissors
Rock -> Paper
Scissors -> Rock
score :: Move -> Move -> Result
score this_move opposing_move
| this_move == beats opposing_move = Win
| this_move == opposing_move = Draw
| otherwise = Loose
这是来自终端的错误信息
[1 of 1] Compiling Main ( test.hs, interpreted )
test.hs:1:60: parse error on input `data'
Failed, modules loaded: none.
谁喜欢告诉我它有什么问题?谢谢XD
【问题讨论】:
-
这不是你的错误的原因,而是
Win的反义词拼写为Lose。 (“Loose”是不同单词的正确拼写)。 -
正如您在此处编写的,您的代码可以正常工作。您使用的是什么操作系统、文本编辑器和 ghc 版本?另外,您能找到一种方法来共享您要编译的确切文件吗?当您在此处复制代码时,它的格式化方式可能存在一些微妙的错误,而这些错误并未保留。进一步的证据是,当我复制您的代码时,第一行没有 60 个字符,但错误消息说问题出在第一行的第 60 个字符。
-
如果第一行没有 60 个字符并且错误消息报告相反,我了解文件格式中使用的行尾字符不是编译器所期望的。然后该文件肯定来自Windows系统,并且他没有被重新格式化以在Mac(类似Linux)操作系统上工作。这就是我的解释。
-
@zurgl 即使使用 Windows 的
\r\n,也有一个\n,编译器对此很满意。在过去,Mac 只使用\r进行行分隔,编译器可能会遇到问题。但我认为今天很难得到这样的文件。 -
@DanielFischer,好的,我不知道 ghc 可以管理这两种情况。感谢您的澄清。
标签: haskell parse-error