use*_*010 18 haskell equality literals
当我加载一个带有以下行的文件时,GHCi究竟发生了什么:0 = 1?
我原以为这会产生错误,但似乎根本没有做任何事情.它有什么用吗?
我认为在GHCi中它只相当于"让0 = 1".那是做什么的?
jbe*_*man 22
在0
您的let
结合实际上是对文字进行模式匹配0
.我最初也不确定发生了什么,但你可以通过使用严格的模式匹配来证实这一点:
Prelude> :set -XBangPatterns
Prelude> let !0 = 1 in 0
*** Exception: <interactive>:13:5-10: Non-exhaustive patterns in pattern binding
Run Code Online (Sandbox Code Playgroud)
如果你给失败的模式匹配一个名字x
,你也可以像这样强制它:
x @ 0 = 1
main = print x
Run Code Online (Sandbox Code Playgroud)
哪会产生错误:
FILE.hs: /path/to/FILE.hs:1:5-13: Irrefutable pattern failed for pattern x@0
Run Code Online (Sandbox Code Playgroud)