Where within Let, Haskell Scoping,



我想访问下面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

这是行不通的。我建议使用wherelet,最常用的是:

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

最新更新