[英]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
如何發生的,因為字符串數字不能總結?
關鍵是a
和b
類型為Int
,只有在 a
和b
相加后才能轉換為帶有show
的String
。
如果您需要進一步說服,請問問自己是否有任何問題
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.