簡體   English   中英

monadic desugaring haskell

[英]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 patternf _ 我試着查看你是否可以在let子句中有多個模式匹配,但從我所看到的,大多數人使用case語句來做到這一點。

我想幫助理解這里的實際情況?

我無法理解你如何在let子句中有兩個模式匹配的情況?

好吧,你可以:

example :: Int -> Int
example n = 
  let f 0 = 1
      f x = x * f (x - 1)
  in  f n

請記住,這是一個let … in…表達,而不是dolet 對於這種表達式中的所有綁定,(幾乎)與通常的頂級表達式相同的規則保持不變,例如,您可以使用模式匹配。

如果你把它轉換到以下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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM