This question already has answers here:
How to define a function in ghci across multiple lines?

(7个答案)



Multi-line commands in GHCi

(5个答案)


7年前关闭。




我想写一个函数,像这样
double :: Int -> Int
double x = x + x

问题是在我写第一行之后:
Prelude> double :: Int -> Int

我尝试按Enter键转到下一行,但是当我得到时:
<interactive>:84:1: Not in scope: `double'
Prelude>

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

那么,如何转到Haskell的下一行(我在Mac OS上使用Terminal)?

最佳答案

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

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与第一个:load对齐-缩进很重要。

我建议您在文本编辑器中完成大部分工作,然后将文件加载到ghci中(使用:reload或在命令行上作为参数提供)并进行播放。在实际编写代码时,我觉得ghci并不是一件令人愉快的工作-更好地处理已经编写的代码。每当您修改ghci中的文本文件:r(或只是ojit_code)时。

关于haskell - 如何在GHCi中换行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18469063/

10-12 23:16