我刚刚下载了完整的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 ‘::’
GHCi 是一个读取评估打印循环 (REPL(,因此它会在输入时评估每一行。 另一方面,area
是一个多行表达式,因此如果您尝试逐行输入它,它将因不完整而失败。
不过,您可以在 GHCi 中输入多行表达式。您需要做的是进入"多行模式",输入您的行,然后再次存在多线模式。您可以使用:{
启动此编辑模式,然后使用 :}
再次关闭它。下面是一个完整的示例:
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源代码,通常使用Stack或Cabal作为项目系统。