如何在GHCi中换行?

11
我想编写一个函数,就像这样:

double :: Int -> Int
double x = x + x

问题在于我写完第一行之后:

Prelude> double :: Int -> Int

我试图通过按Enter键换行,但这样做时会出现以下情况:

<interactive>:84:1: Not in scope: `double'
Prelude>

程序好像执行了第一行,但我不想这样,我想让程序让我写下第二行,然后再编译和执行

那么,我该如何在 Haskell 中换行(我正在使用 Mac OS 上的终端)?


1
使用ghci,编写Haskell代码的更好方法是编辑文件并使用:load和:reload。这样可以避免在每次错误后重新输入。 - seanmcl
1个回答

36

在ghci中,您必须将定义放在单行上,并以let开头(编辑:您不再需要使用let开始ghci定义)。这与源文件中的方式不同:

ghci> let double :: Int -> Int; double x = x + x

您还可以使用:{:}来进行多行定义:

ghci> :{
Prelude| let double :: Int -> Int
Prelude|     double x = x + x
Prelude| :}
ghci> double 21
42

确保将第二个double与第一个对齐缩进--缩进非常重要。

我建议您在文本编辑器中完成大部分工作,然后将文件加载到ghci中(使用:load命令或将其作为参数提供),并进行调试。实际编写代码时,我不认为ghci很愉快--它更适合处理已经编写好的代码。每当您修改文本文件时,在ghci中输入:reload (或:r)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接