我想访问下面where子句中的let绑定。
为什么此代码失败?更重要的是:我该如何让它发挥作用?
test bar = let baz = bar - 1 in
foo where
foo = baz`
上面写着:不在范围内:baz'
Perhaps you meant
bar‘
您可以将where看作是在属于单个匹配的右手边周围编写let的另一种方法。
在你的情况下,这很容易,因为只有一个右手边。因此,你写道:
test bar = let foo = baz in let baz = bar-1 in foo
这是行不通的。我建议使用where或let,最常用的是:
test bar = foo
where
foo = baz
baz = bar -1
除此之外,当您只定义baz
时,baz'
将永远不在作用域中。
where
子句只能访问封闭函数的参数和任何更高级别的绑定。您可以将baz
作为参数传递给foo
:
test bar = let baz = bar - 1 in (foo baz)
where foo x = x