1

我正在尝试在另一个函数中定义一个本地函数,但似乎无法正确使用语法。我有以下内容:

foo : Int -> Bool
foo i =
  let bar j = j < 5
  bar i

但是我在bar. 定义这样一个函数的正确语法是什么?

4

1 回答 1

1

对于普通的本地函数绑定和let一般的变量绑定,您必须in在定义所有函数/变量后使用:

  let bar j = j < 5
  in bar i

A letwithoutin只能在do块中使用,在这种情况下,变量是为块的其余部分定义的do

blah = do
  let bar j = j < 5
  assert $ not $ bar 5
  pure $ bar 5

但是,这只能在使用有效的情况下使用do。否则,使用in.

where子句也可以附加到定义中,以代替let

foo i = bar i
  where bar j = j < 5

这种使用与它在语法where中的作用无关。template

请注意where,虽然在某些情况下它更好,但对于可以在哪里使用(对不起)它是非常严格的,而(再次抱歉)let/in可以在任何允许使用表达式的地方工作:

foo i =
  let bar j = j < 5
  in bar (let q = 2 in i + q)

请参阅有关let 的daml 文档以及有关何时使用 let 或 where 的讨论

于 2019-03-12T18:24:29.303 回答