簡體   English   中英

State和其他MTL monad的應用實例?

[英]Applicative instance for State and other MTL monads?

查看Control.Applicative的文檔,我注意到它們具有某些monad的實例聲明(例如IOMaybe ,尤其是ST ),但是沒有MTL monad的實例,例如StateRWS 相反,它看起來像是定義了一個通用的WrappedMonad類型,我猜這是為了涵蓋所有其他情況。

所以這是我的問題:

  1. 為什么不存在MTL monad的Applicative實例? 到目前為止,我自己能夠找到的最好的答案是一個三年前的帖子 ,有人實現了這些實例,並被忽略了。

  2. WrappedMonad什么關系? 在Reddit上發現了一篇簡短解釋的帖子 ,但我覺得我對如何使用它很困惑。

最終我希望能夠以一種應用風格使用State (正如推薦的那樣),但是如果我必須使用WrappedMonad數據構造函數WrappedMonad我的代碼,那么它似乎不是一個勝利。 我也可以完全忽略WrappedMonad ,並以與IOST等相同的方式自己定義Applicative實例:就returnap ......但這似乎也很傻。

該文檔僅基於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.

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