仍然对 GHCi 中的“让”感到困惑

Pen*_*ino 2 haskell

我已经阅读了这个问题的答案,但我仍然感到困惑。在 Windows 10 中运行的 GHCi(版本 8.2.1)和 WinGHCi(版本 1.0.6)中,在提示符下键入时,无论是否使用 let,我似乎都能将值绑定到表达式(请参阅以下)。同样,我似乎能够通过let fx = x x* 和fx = x x*定义相同执行的函数

Prelude> x = 3
Prelude> let y = 3
Prelude> x
3
Prelude> y
3
Prelude> x == y
True
Prelude>
Run Code Online (Sandbox Code Playgroud)

那么在 GHCi 中什么时候真正需要let呢?

如果相关,为 GHCi 设置的语言标志(我认为这是默认值,因为我没有弄乱它们)是

base language is: Haskell2010
with the following modifiers:
  -XNoDatatypeContexts
  -XExtendedDefaultRules
  -XNoMonomorphismRestriction
  -XNondecreasingIndentation
Run Code Online (Sandbox Code Playgroud)

Pen*_*ino 5

回答我自己的问题。我刚刚阅读了脚注

这在 GHC 8.0.1 发布时发生了变化;不再需要在 GHCi 中使用 let in 声明。由于我们假设本版的大多数读者将使用 GHC 的早期版本,因此我们在整本书中都保留了 let 符号,这不会导致任何错误或损坏。

Haskell Programming From First Principles 中,这证实了let不再是必要的。