Для обычных локальных привязок функций и привязок переменных с let
в общем случае вы должны использовать in
после определения всех функций / переменных:
let bar j = j < 5
in bar i
A let
без in
может использоваться в блоке do
только , и в этом случае переменная определяется для остальной части блока do
:
blah = do
let bar j = j < 5
assert $ not $ bar 5
pure $ bar 5
Однако это может толькоиспользоваться там, где допустимо использовать do
.В противном случае использование in
.
Предложение A 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)
См. daml docs по let и это обсуждение того, когда использовать let или где.