作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想写一个函数,像这样
double :: Int -> Int
double x = x + x
问题是在我写完第一行之后:
Prelude> double :: Int -> Int
我尝试按回车键转到下一行,但是当我这样做时,我得到:
<interactive>:84:1: Not in scope: `double'
Prelude>
看起来程序执行了第一行,但我不希望这样,我希望程序让我写第二行然后才编译执行
那么,我怎样才能转到 Haskell 中的下一行(我在 Mac OS 上使用终端)?
最佳答案
在 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
)。
关于haskell - 如何在 GHCi 中转到新行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18469063/
我是一名优秀的程序员,十分优秀!