与haskell文字等号

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)


aav*_*ogt 9

如果你给失败的模式匹配一​​个名字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)