我正在写一个与此类似的函数:
f x = let
x = ...
in
e
Run Code Online (Sandbox Code Playgroud)
由于Haskell中的作用域规则,在e中使用x将解析let构造中x的定义.
为什么在Haskell中允许这样的事情?编译器不应该拒绝这样的程序,告诉我们不能绑定与函数参数同名的值.
(这个例子可能过于简单,但在现实世界中,变量具有与之相关的语义含义,很容易犯这样的错误)
Cha*_*ert 10
您可以使用编译器标志为此类型的名称阴影启用警告
只要内部范围值与外部范围值具有相同的名称(即内部值隐藏外部值),此选项将导致发出警告.这可以捕获印刷错误,这些错误会变成难以发现的错误,例如,无意中捕获f = ...中的f = id的递归调用....
但是,编译时更常见-Wall,其中包括许多其他警告,可以帮助您避免不良做法.
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |