實際簡白的 Monad 解釋
Functor 的好處是:它讓我們能用同樣的方式操作不同的「容器型別」,想像成一個「裝值的盒子」,它允許我們對盒子裡的值進行運算,但同時又保留了盒子的結構。Functor 「提供了方式在容器裡操作值」,遵循同一性(Identity)與合成性(Composition)。
Functor 的好處是:它讓我們能用同樣的方式操作不同的「容器型別」,想像成一個「裝值的盒子」,它允許我們對盒子裡的值進行運算,但同時又保留了盒子的結構。Functor 「提供了方式在容器裡操作值」,遵循同一性(Identity)與合成性(Composition)。
從先前 Functor 的概念出發,Functor 的 `map` 只能作用在數值上,而不能是「存在於容器中的數值」上,所以才需要 Applicative Functor,一種比 Functor 更多功能的結構,除了滿足 Functor 的功能外還能「讓盒子裡的函數作用(apply)到另一盒子的值」。
一種代碼風格,著重於函式的組合關係而非具體資料,定義函式時不顯式提其參數(points),而是透過函式組合與高階函式來表達資料流動。可以減少不必要的命名保持代碼簡潔與達成更好的通用組合性,但是額外的抽象須被理解與熟悉。透過兩個實際案例熟悉 Pointfree 開發風格。
我不是數學家也對於範疇論沒有太大興趣,但它深刻的與 Functional Programming 進階理念掛勾,透過實戰了解開發層面這些理論可以如何撰寫更好維護的程式。Functor 是一種具有 map 方法的結構,允許對其中的值進行轉換同時保持結構不變、讓函數可以基於容器進行組合,意味著可以被用於封裝副作用或情境。
柯里化就是將使用多個參數的函式轉換成一系列使用一個參數的函式,用不同的思考方式來撰寫函式,藉由將一個大函式分解成很多僅使用一個參數的函式,打造可被重複利用與輕鬆除錯的函式,透過實際製作三明治函式案例簡白的說明柯里化的概念。
寫程式久了會發現撰寫乾淨可被維護的程式是一件相當困難的事情,其中一個造成難維護的原因是因為「函式除了運算並回傳結果之外過程中產生變化影響到其餘的程式」,換句話說問題就是「不必要的副作用,讓程式變得捉摸不定難以理解」,因此應該了解純粹函式的定義以及如何使用,為了更進一步撰寫撰寫乾淨的代碼。