回答
早在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變壓器的使用和示例?
- 5. IO和未來[選項] monad變壓器
- 6. 要使用哪種Monad變壓器?
- 7. 如何上傳monad變壓器類型?
- 8. 在Haskell中使用monad變壓器RWST
- 9. 避免與Monad變壓器電梯
- 10. 如何縮放monad變壓器?
- 11. 在IO monad中使用monad
- 12. 在快照中使用讀卡器monad(或者,在快照中使用monad變壓器)
- 13. 如何從main啓動monad變壓器堆棧?
- 14. 在變壓器堆棧中展開STT monad?
- 15. 如何讓ReaderT與另一個monad變壓器一起工作?
- 16. 在monad變壓器堆棧中使用weightedSample時,「沒有MonadRandom的實例」
- 17. 貓Monad變形金剛
- 18. Monad變形金剛電梯
- 19. 點閱讀器monad scala
- 20. 幫助閱讀器monad
- 21. 瞭解閱讀器monad
- 22. Monad「拆箱」
- 23. haskell monad案例
- 24. foldlWithKey in monad
- 25. Monad或不是?
- 26. Partiality Monad Transformer
- 27. Haskell State Monad
- 28. State Monad的傳播
- 29. Scala中的Monad變形金剛
- 30. Haskell - Applicative/Monad實例
你是什麼意思的「標準」版本? – Adrian 2013-04-11 10:42:00
你是什麼意思,「變壓器」的「標準」版本?通常,它是適用於身份單元的標準版本的變壓器。 – leftaroundabout 2013-04-11 10:42:01
我的意思是'國家的身份'和'國家的身份'兩者在功能上是一樣的,對嗎? – 2013-04-11 10:43:35