输入`='时Haskell错误解析错误

Son*_*Son 111 haskell

我是Haskell的新手,在开始之后ghci我尝试过:

f x = 2 * x
Run Code Online (Sandbox Code Playgroud)

我获得了:

<interactive>:1:4: parse error on input `='
Run Code Online (Sandbox Code Playgroud)

我不明白.

奇怪的是,它之前运作良好.我想我已经完成了错误配置的Haskell.重新安装ghc6并不能解决问题.

有关信息,我使用的是Ubuntu 10.4,ghc6的版本是6.12.1-12

ken*_*ytm 159

在GHCi 7.x或更低版本中,您需要let在其中定义内容.

Prelude> let f x = x * 2
Prelude> f 4
8
Run Code Online (Sandbox Code Playgroud)

从GHC 8.0.1开始,GHCi支持顶级绑定,因此OP的代码无需更改即可运行.

GHCi, version 8.0.1.20161213: http://www.haskell.org/ghc/  :? for help
Prelude> f x = x * 2
Prelude> f 4
8
Run Code Online (Sandbox Code Playgroud)

  • ["了解你Haskell"](http://learnyouahaskell.com/starting-out)根本没有提到这一点. (43认同)
  • 谢谢."真实世界haskell"(至少我的版本)在其示例中没有"let" (15认同)
  • @Bakuriu是的,但作者告诉你在外部文件中写下你的定义并将其加载到GHCI中,而不是直接在GHCI中写入.而前者完美无缺. (9认同)
  • @Bakuriu`LYAH` [确实](http://learnyouahaskell.com/starting-out#an-intro-to-lists)现在提到`let`.但后续行动.在`LYAH`中我读了'addThree :: Int - > Int - > Int - > Int`(换行符)`addThree xyz = x + y + z`但只有第二个用`let`在`GHCi`中运行.为什么? (2认同)

dav*_*420 50

当您键入Haskell源文件时,

f x = 2 * x
Run Code Online (Sandbox Code Playgroud)

是正确的.

直接输入ghci时,需要let在行的开头键入:

let f x = 2 * x
Run Code Online (Sandbox Code Playgroud)

  • 为什么它在GHCi中不起作用?为什么语法有区别? (12认同)

Rae*_*eez 20

使用ghci的一个好的经验法则是你输入的任何代码都应该符合do-block语义; 也就是说,您可以在语法上假设您在IO monad中编程(如果这是新术语,请不要担心!我强烈建议您阅读本教程).

这个答案通过一个例子来说明这一点,并且可以提供对IO和ghci本质的更多工作洞察力.

  • 这个答案对初学者来说没用.他正在寻找一个简单的可操作提示来推进,而不是高级主题.你没有向学习乘法表的孩子解释多项式产品 - 它没有显示你知道多少,它表明你不知道如何分享你所知道的. (26认同)
  • 这是我学习Haskell的第一天,我发现这个答案非常有助于理解我为什么要使用`let`; 我就像"wtf,为什么我必须使用`let`"然后我读到这个并且开悟了. (10认同)
  • @btk:每个人都必须在某个时候停止成为初学者.我昨天开始学习Haskell,我相信在很短的时间内,我会理解Raeez所说的一切. (3认同)