[英]monadic desugaring haskell
閱讀現實世界Haskell中關於monad的章節。 我偶然發現了符號的貶低,特別是當我們有類似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語句來做到這一點。
我想幫助理解這里的實際情況?
我無法理解你如何在let子句中有兩個模式匹配的情況?
好吧,你可以:
example :: Int -> Int
example n =
let f 0 = 1
f x = x * f (x - 1)
in f n
請記住,這是一個let … in…
表達,而不是do
的let
。 對於這種表達式中的所有綁定,(幾乎)與通常的頂級表達式相同的規則保持不變,例如,您可以使用模式匹配。
如果你把它轉換到以下where
它可能會變得更容易一些:
example :: Int -> Int
example n = f n
where
f 0 = 1
f x = x * f (x - 1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.