【发布时间】:2016-09-21 11:05:49
【问题描述】:
阅读关于现实世界 Haskell 中单子的章节。我遇到了 do 符号的脱糖,特别是当我们有类似 pattern <- action 的东西时。
-- file: ch14/Do.hs
doNotation3 =
do pattern <- act1
act2
{- ... etc. -}
actN
上面的例子被脱糖成:
-- file: ch14/Do.hs
translated3 =
let f pattern = do act2
{- ... etc. -}
actN
f _ = fail "..."
in act1 >>= f
我很难理解如何在 let 子句中有两个模式匹配案例?
我不明白你怎么能在同一个 let 子句中拥有 f pattern 和 f _。我尝试查找是否可以在 let 子句中有多个模式匹配,但据我所见,大多数人使用 case 语句来做到这一点。
我需要一些帮助来了解这里实际发生了什么?
【问题讨论】:
-
使用 lambda-case 等效于
let f = (\case pattern -> do { act2; ... ; actN } ; _ -> fail "...") in act1 >>= f。
标签: haskell monads do-notation