[英]Applicative instance for State and other MTL monads?
查看Control.Applicative
的文檔,我注意到它們具有某些monad的實例聲明(例如IO
, Maybe
,尤其是ST
),但是沒有MTL monad的實例,例如State
和RWS
。 相反,它看起來像是定義了一個通用的WrappedMonad
類型,我猜這是為了涵蓋所有其他情況。
所以這是我的問題:
為什么不存在MTL monad的Applicative
實例? 到目前為止,我自己能夠找到的最好的答案是一個三年前的帖子 ,有人實現了這些實例,並被忽略了。
最終我希望能夠以一種應用風格使用State
(正如我所推薦的那樣),但是如果我必須使用WrappedMonad
數據構造函數WrappedMonad
我的代碼,那么它似乎不是一個勝利。 我也可以完全忽略WrappedMonad
,並以與IO
, ST
等相同的方式自己定義Applicative
實例:就return
和ap
......但這似乎也很傻。
該文檔僅基於base
包的內容生成,該包不包含State
- 因此它不包含Applicative
實例。 如果您查看MTL文檔 ,您將看到列出的Applicative
實例。
或者,你可以打開GHCI,進口Control.Monad.State和Control.Applicative和使用:i Applicative
列出的實例Applicative
或:i StateT
列出了該類別StateT
有實例( State
是一個類型別名StateT
,其中一個參數已修復)。 要么表明確實存在這樣的實例。
mtl monad的Applicative實例不能在基礎文檔中列出,因為此時沒有可用的mtl。 好消息是,mtl具有應用實例StateT,例如 mtl-2.0.0.0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.