【问题标题】:Where within Let, Haskell Scoping,在 Let,Haskell 范围内,
【发布时间】:2013-12-27 22:15:38
【问题描述】:
我想在下面的 where 子句中访问 let 绑定。
为什么此代码会失败?
更重要的是:如何让它发挥作用?
test bar = let baz = bar - 1 in
foo where
foo = baz`
它说:
不在范围内:baz'
Perhaps you meantbar'
【问题讨论】:
标签:
haskell
scope
where-clause
let
【解决方案1】:
您可以将 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' 将永远不会在范围内。
【解决方案2】:
where 子句只能访问封闭函数的参数和任何更高级别的绑定。您可以将baz 作为参数传递给foo:
test bar = let baz = bar - 1 in (foo baz)
where foo x = x