回答
早在mtl
1.0,我們有兩個
newtype State s a = State { runState :: s -> (a, s) }
和
newtype StateT s m a = StateT { runStateT :: s -> m (a, s) }
然而,這意味着任何人誰不得不實施情況的東西像MonadState
清盤重複勞動。
在transformers
(和現在停止活動monads-fd
和monads-tf
)羅斯帕特森決定使用的僅提供後者,並使用Identity
作爲鹼單子的簡單的方法。
這導致維護mtl
的實施工作量減少,並且消除了實現State
monad有兩種不同方式的事實。然而,它確實使得mtl
的內部難以教授,因爲您需要了解transformers
版本,並且不要將簡化版本作爲訓練輪。
當舊的mtl
退役並且monads-fd
變成mtl
2.0時,使用現有的transformers
繼續進行此設計決定。
我個人很喜歡爲了教學目的而分開單純的monad,至少在辯論的另一邊有更多的人。
我完全同意教學目的。也許我們應該建立一個包含原始簡單版本的monads-teach包。 – 2013-04-11 15:37:40
從文檔:在計算上,沒有理由使用Identity monad,而不是簡單地將函數應用於其參數。身份monad的目的是它在monad變換器理論中的基礎性作用。應用於Identity monad的任何monad變換器都會生成該monad的非變換版本。
據我所知,通過應用身份monad從monad變壓器獲得monad的非變壓器版本正是身份monad的存在。與僅使用非變壓器單體相比,沒有優點,但有時您必須使用單體變壓器,例如,當你想使用的功能需要它。
- 1. monad在monad變壓器上下文
- 2. monad變壓器中的內部monad是否有`replicateM`函數?
- 3. 列表monad變壓器
- 4. Monad堆棧滲透類與免費/操作Monad變壓器?
- 5. 在monad變壓器堆棧中的evalState
- 6. monad變壓器的使用和示例?
- 7. 作爲變壓器摘要monad作文
- 8. 當monad變壓器需要提升嗎?
- 9. Monad變壓器:IO和狀態
- 10. IO和未來[選項] monad變壓器
- 11. 要使用哪種Monad變壓器?
- 12. 在Haskell中使用monad變壓器RWST
- 13. 如何上傳monad變壓器類型?
- 14. 如何縮放monad變壓器?
- 15. 避免與Monad變壓器電梯
- 16. Monad變壓器和電梯功能
- 17. 整理Monads - 將monad變壓器的應用轉換爲新型monad
- 18. 是否有一個monad沒有相應的monad變換器(IO除外)?
- 19. 在IO monad中使用monad
- 20. 添加一個monad到變壓器堆棧的中間
- 21. 在快照中使用讀卡器monad(或者,在快照中使用monad變壓器)
- 22. 在變壓器堆棧中展開STT monad?
- 23. 如何讓ReaderT與另一個monad變壓器一起工作?
- 24. 如何從main啓動monad變壓器堆棧?
- 25. 捕捉monad變換器中的異常
- 26. 有沒有叫「semi-monad」或「counter-monad」的東西?
- 27. 爲什麼ListT monad變壓器被認爲是越野車 - 它打破了哪些monad法則?
- 28. 在monad變壓器堆棧中使用weightedSample時,「沒有MonadRandom的實例」
- 29. Markup monad如何與Html monad關聯?
- 30. 全局變量和閱讀器monad
你是什麼意思的「標準」版本? – Adrian 2013-04-11 10:42:00
你是什麼意思,「變壓器」的「標準」版本?通常,它是適用於身份單元的標準版本的變壓器。 – leftaroundabout 2013-04-11 10:42:01
我的意思是'國家的身份'和'國家的身份'兩者在功能上是一樣的,對嗎? – 2013-04-11 10:43:35