簡體   English   中英

繼續Monad工作

[英]Continuation Monad Working

我正試圖圍繞以下這段代碼:

ex2 = do
  a <- return 1
  b <- Cont (\fred -> fred 10)
  return $ a + b

ghci > runCont ex2 show
"11"

字符串“11”如何輸出函數? 我得到show函數將10轉換為String的部分,但是a + b如何發生的,因為字符串數字不能總結?

關鍵是ab類型為Int ,只有 ab相加才能轉換為帶有showString

如果您需要進一步說服,請問問自己是否有任何問題

runCont ex2 id

要么

runCont ex2 (\a -> a * a)

如果您需要更有說服力,請注意類型定義和monad實例

data Cont r a = Cont { runCont :: (a -> r) -> r }

instance Monad (Cont r) where
  return a = Cont ($a)

所以你可以斜視一下,說服自己你的例子相當於

ex = do
  a <- return 1
  b <- return 10
  return (a + b)

這只是

ex = return (1 + 10)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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