使用WinGHCi解析预制代码的错误

时间:2018-01-27 03:38:43

标签: haskell parse-error

我刚刚下载了完整的Haskell平台并从我的老师那里输入了一些代码来尝试破解,但事实证明它(或其他东西)已经被破坏了,因为当我评估main表达式时,我得到一个解析错误。

data Shape = Circle Double | Rect Double Double
area :: Shape -> Double
area (Circle radius) = 3.1415 * radius * radius
area (Rect width height) = width * height

错误

<interactive>:17:56: error: parse error on input ‘::’

我的安装有问题吗?我正在运行版本8.2.2

编辑:这是直接来自WinGHCi窗口的错误的逐字复制品

GHCi, version 8.2.2: http://www.haskell.org/ghc/  :? for help
Prelude> data Shape = Circle Double | Rect Double Double
area :: Shape -> Double
area (Circle radius) = 3.1415 * radius * radius
area (Rect width height) = width * height

<interactive>:7:54: error: parse error on input ‘::’

1 个答案:

答案 0 :(得分:1)

GHCi是一个读取评估打印循环(REPL),因此它会评估每一行的输入。另一方面,area是一个多行表达式,所以如果你尝试逐行输入它,它就会因为不完整而失败。

可以在GHCi中输入多行表达式。您需要做的是进入多线模式&#39;,输入您的线路,然后再次存在多线模式。您使用:{启动此编辑模式,然后使用:}再次关闭它。这是一个完整的例子:

Prelude> data Shape = Circle Double | Rect Double Double
Prelude> :{
Prelude| area :: Shape -> Double
Prelude| area (Circle radius) = 3.1415 * radius * radius
Prelude| area (Rect width height) = width * height
Prelude| :}
Prelude> area $ Circle 1.1
3.8012150000000005
Prelude> area $ Rect 1.2 3.4
4.08

正如您所看到的,Shape的定义已经是单行,所以我觉得不需要在该阶段进入多行模式。但是,在输入area的定义时,必须使用:{:}

然而,一般而言,GHCi用于实验和快速反馈。您应该在.hs个文件中编写Haskell源代码,通常使用StackCabal作为项目系统。