[英]Why is `2 + x = 7` valid Haskell?
当我尝试编译
main = putStrLn $ show x where
2 + x = 7
GHC抱怨
error: Variable not in scope: x
|
1 | main = putStrLn $ show x
| ^
所以似乎2 + x = 7
本身在语法上是有效的,尽管它实际上并没有定义x
。 但为什么会这样呢?
它是有效的,因为它定义了+
。
main = print (3 + 4)
where -- silly redefinition of `+` follows
0 + y = y
x + y = x * ((x-1) + y)
上面,Prelude (+)
函数被本地绑定阴影化。 结果将是24
而不是7
。
打开警告应该指出危险的阴影。
<interactive>:11:6: warning: [-Wname-shadowing]
This binding for ‘+’ shadows the existing binding
您正在定义一个名为+
的本地函数。
2 + x = 7
相当于(+) 2 x = 7
,相当于
(+) y x | y == 2 = 7
x
是(未使用的)参数,仅在第一个参数为2
定义该函数。 这不是很有用,但它解释了为什么x
在外面不可见。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.