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



我刚刚下载了完整的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作为项目系统。

相关内容

  • 没有找到相关文章

最新更新