我想在以下where子句中访问let-binding。
为什么此代码失败? 更重要的是:我如何让它发挥作用?
test bar = let baz = bar - 1 in
foo where
foo = baz`
它说:
不在范围内:baz'
Perhaps you meant
bar'
答案 0 :(得分:3)
您可以将 where 视为另一种在属于单个匹配的右侧编写 let 的方法。
在你的情况下,它很容易,因为只有一个右手边。因此,你写道:
test bar = let foo = baz in let baz = bar-1 in foo
这不起作用。我建议坚持使用 或让,大多数惯用语都是:
test bar = foo
where
foo = baz
baz = bar -1
除此之外,当您只定义baz
时,baz'
将永远不在范围内。
答案 1 :(得分:0)
where
子句只能访问封闭函数的参数和任何更高级别的绑定。您可以将baz
作为参数传递给foo
:
test bar = let baz = bar - 1 in (foo baz)
where foo x = x