【问题标题】:Haskell GHCI compiler: Parse error in repl when defining and declaring a simple functionHaskell GHCI 编译器:在定义和声明简单函数时解析 repl 中的错误
【发布时间】:2014-02-21 19:23:57
【问题描述】:

我正在阅读“Learn You A Haskell”一书。

我正在尝试定义这个简单的函数,但编译器将其吐出。这可能是非常基本和简单的东西,但我是一个完整的 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 `='

前奏>

【问题讨论】:

  • 您需要使用let - let doubleMe x = x + x
  • 他为什么不在书中提及?这是这个版本的 ghci 中的新功能吗?

标签: haskell ghci


【解决方案1】:

如果你仔细read the book,它会说(强调我的):

打开你最喜欢的文本编辑器并输入这个函数,该函数接受一个数字并将其乘以 2。

    doubleMe x = x + x  

这对ghc来说很好,因为它可以理解它是一个函数声明(并且书中没有告诉你在ghci中尝试它。实际上shortly after它解释了如何使用let “在 GHCI 中定义一个名称。在 GHCI 中执行 let a = 1 相当于在脚本中编写 a = 1 然后加载它。”)。为了让 ghci 明白你正在定义一个函数,你需要使用let

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

【讨论】:

  • 注意:我在 Haskell 中相当文盲,所以我实际上不知道为什么会有这样的差异。
  • @Shabaz - 因为 ghci 在 IO monad 中执行,所以需要使用 let 绑定非 IO 值。
  • 我不喜欢 Haskell 的一件事是 REPL。就像你在使用 Haskell 之前必须学习各种复杂的功能一样。
  • @EvanZamir,REPL 真的只是为了实验。因此,一旦您了解了基础知识并且想要快速测试某些东西是如何工作的,您就可以使用 REPL。如果你不使用它,你不会错过太多。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    相关资源
    最近更新 更多