望着文檔的Control.Applicative
,我注意到,他們對某些單子(例如IO
,Maybe
和特別ST
)實例聲明,但也有MTL單子如State
和RWS
沒有實例。相反,它看起來像定義了一個通用的WrappedMonad
類型,我猜測它將涵蓋所有其他情況。適用於州和其他MTL單子的實例?
因此,這裏是我的問題:
爲何沒有對MTL單子
Applicative
實例?目前爲止,我自己能找到的最佳答案是three year old post,其中有人實施了這些實例並被忽略。與
WrappedMonad
有什麼關係?我發現一個簡短的解釋它的post on Reddit,但我想我對如何使用它感到困惑。
最後,我希望能在一個適用風格來使用State
(如爲recommended to me),但如果我有亂扔垃圾,然後它似乎我與WrappedMonad
數據構造的代碼不一樣的勝利。我也可以完全忽略WrappedMonad
,並且自己定義Applicative
實例的方式與IO
,ST
等相同:return
和ap
......但這似乎也是愚蠢的。
如果只有我們有Functor => Applicative => Monad,和(Alternative,Monad)=> MonadPlus – alternative