2014-02-21 22 views
3

我正在阅读“Learn You Haskell”一书。Haskell GHCI编译器:在定义和声明简单函数时解析repl错误

我想定义这个简单的函数,但编译器正在吐出它。这可能是一些很基本的,简单的,但我是一个完整的Haskell新手:

GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help 
Loading package ghc-prim ... linking ... done. 
Loading package integer-gmp ... linking ... done. 
Loading package base ... linking ... done. 
Prelude> doubleMe x = x + x 

<interactive>:2:12: parse error on input `=' 

前奏曲>

+1

您需要使用'let' - '让doubleMe X = X + x'。 – Lee

+1

他为什么不在书中提及它?这个版本的ghci中有这个新东西吗? –

回答

5

如果你仔细read the book,它说(重点煤矿):

打开你最喜欢的文本编辑器在这个函数采用一个数字乘以2就一拳。

doubleMe x = x + x 

这是罚款GHC,因为它能够理解,这是一个函数声明(和书没有告诉你尝试在ghci中。事实上,shortly after它解释let如何使用“在GHCI中定义一个名称,让GHCI中的a = 1等于在脚本中写入a = 1然后加载它”)。为了让ghci中了解到,要定义你需要使用let功能:

Prelude> let doubleMe x = x + x 
Prelude> doubleMe 10 
20 
+0

注意:我在Haskell中是个不识字的人,所以我实际上并不知道_Why_有什么不同。 – Shahbaz

+1

@Shabaz - 这是因为ghci在IO monad中执行,因此您需要使用let来绑定非IO值。 – Lee

+0

我不喜欢Haskell的一件事是REPL。就像你必须在使用Haskell之前学习各种复杂的功能。 –

1

在GHCI,您绑定使用let关键字新的标识符。

> let doubleMe x = x + x 
> doubleMe 3 
> 6