我正在尝试在另一个函数中定义一个本地函数,但似乎无法正确使用语法。我有以下内容:
foo : Int -> Bool
foo i =
let bar j = j < 5
bar i
但是我在bar
. 定义这样一个函数的正确语法是什么?
我正在尝试在另一个函数中定义一个本地函数,但似乎无法正确使用语法。我有以下内容:
foo : Int -> Bool
foo i =
let bar j = j < 5
bar i
但是我在bar
. 定义这样一个函数的正确语法是什么?
对于普通的本地函数绑定和let
一般的变量绑定,您必须in
在定义所有函数/变量后使用:
let bar j = j < 5
in bar i
A let
withoutin
只能在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 的讨论。