9

我想写一个函数,像这样

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

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

Prelude> double :: Int -> Int

我尝试按回车键转到下一行,但是当我这样做时:

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

似乎程序执行了第一行,但我不希望那样,我希望程序让我写第二行然后才编译并执行

那么,我怎样才能进入 Haskell 的下一行(我在 Mac OS 上使用终端)?

4

1 回答 1

33

在 ghci 中,您必须将定义放在一行上,并以它们开头let(编辑:您不必再以 ghci 定义开头let)。它与源文件中的不同:

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

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

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

确保缩进第二个double以与第一个对齐——缩进很重要。

我建议在文本编辑器中完成大部分工作,然后将文件加载到 ghci(使用:load,或在命令行中将其作为参数提供)并使用它。在实际编写代码时,我并不觉得使用 ghci 非常愉快——它更擅长处理已经编写的代码。每当您:reload:rghci.

于 2013-08-27T15:09:01.070 回答