????????每個學習monad的人都要寫一份自己理解的monad。然后還是包括自己沒人能看到自己在寫啥,而且大部分寫的還是錯誤的。
? ? ? ? 距離學習monad有接近2周了,已經挺模糊了。
? ? ? ? monad我理解有兩個基本作用:
1. 能夠對全部的返回值做鏈式調用。只能封裝成monad的形式,才能保證返回的是一個符合monad要求的對象,可以一直去鏈式調用
2. 將結果有變化的地方,用monad進行封裝。騙自己說是封裝的是行為,不是結果。美其名曰將變化的部分為了將副作用局限在一個可控的范圍內。
monad就是自函子范疇上的幺半群。
? ? ? ? 1. 自函子范疇
????????A monad is a monoid in the category of endofunctors. Whats the problem?
1. 為什么叫范疇。就是因為可以存在f*g*m 等等這種多層復合映射,而不是只有單一的f(x)這種單一映射。為了表示這種多層復合映射,因此這里應該叫范疇才行
2. 自函子。應該就是指f*g*m這種復合映射的定義域和值域是同一個。
3.?幺半群其實就是重點理解return其實是一個單位元。
幺半群的三個特性,本質上就是為了可以有效的進行鏈式操作。同時結合律的特性保證了函數式程序的編譯執行過程中,可以自主進行函數的優化結合進行性能優化。
函數式編程——Functor、Applicative、Monad | 楚權的世界
函數式夜點心:IO Monad 與副作用處理