为什么我可以将值绑定到 Haskell 处的值?

Why can I bind values to values at Haskell?

如果我开始 ghci 并输入 4 = 51.2 = 3.4 之类的内容,它会接受它,但不会打印任何内容。但是,在这之后 4 仍然是 4 而不是 5。为什么 GHC 没有抛出“无法分配给文字”之类的错误?

考虑

> let 4=5 in 4
4

> let x@4=5 in x
*** Exception: <interactive>:1423:5-9: Irrefutable pattern failed for pattern x@4

第一个代码段中返回的 4 未引用 LHS 中的 4。返回的 4 只是另一个文字。

第二个返回的 x 确实如此,因此模式 4(不是文字 4)与文字 5 的值相匹配。匹配失败。

无论如何,这当然不会影响任何后续交互,因为绑定仅限于 let 表达式。如果你像在旧版本的 GHCi 中那样使用 let 而不使用 in,那么确实会影响以下交互,根本没有任何东西可以强制绑定,因此它保持空闲和无效。