为什么我可以将值绑定到 Haskell 处的值?
Why can I bind values to values at Haskell?
如果我开始 ghci
并输入 4 = 5
或 1.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
,那么确实会影响以下交互,根本没有任何东西可以强制绑定,因此它保持空闲和无效。
如果我开始 ghci
并输入 4 = 5
或 1.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
,那么确实会影响以下交互,根本没有任何东西可以强制绑定,因此它保持空闲和无效。