簡體   English   中英

延續monad“界面”

[英]Continuation monad “interface”

狀態monad“接口”

class MonadState s m where
    get :: m s
    put :: s -> m ()

(+ return and bind)允許使用State monad構造任何可能的計算,而無需使用State構造函數。 例如, State $ \\s -> (s+1, s-1)可以寫為

 do s <- get
    put (s-1)
    return (s+1)

同樣,我不必使用Reader構造函數,因為我可以使用askreturn(>>=)創建該計算。 精確地: Reader f == ask >>= return . f Reader f == ask >>= return . f

它是同真正的延續-是有可能寫的所有實例Cont ra使用callCC (唯一的功能MonadCont )回報,並綁定,永不鍵入類似Cont (\\c -> ...)

我不這么認為。 查看類型:

Cont :: ((a -> r) -> r) -> Cont r a
callCC :: ((a -> Cont r b) -> Cont r a) -> Cont r a

如果您只有callCC ,那么在任何地方都不會使用r作為類型-它可以是任何類型。 因此,我不知道如何翻譯將其用作類型的內容,例如:

Cont (const 42) :: Cont Int a

如果我只有callCC就無法限制r

無論如何,這是我的預感。 並不十分嚴格,但似乎令人信服。

暫無
暫無

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

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