點燈坊

失くすものさえない今が強くなるチャンスよ

タグ : Ramda

重新認識 chain()

Ramda 的 chain() 是很神奇的 Function,除了視為 flatMap() 外,也可用於 Monad,只要在 Monad 內將值也改為 Monad 時,亦可使用 chain()

使用 Promise 實現 Either Monad

Promise 傳統都用來處理 Asynchronous 代表 未來值,但由於其具有 Rejected 與 Fulfilled,很類似 Either 的 Left 與 Right,且 then() 又兼具 map()chain() 特性,因此可藉由 Promise 實現 Either 處理 Exception。

Promise 之 Functor 與 Monad 二元性

Promise 是 ECMAScript 2015 所提出的新型態,專門處理 Asynchronous,雖然也可 await 之後繼續以 Imperative 處理,但 Promise 本身具有 Functor 與 Monad 的一些特性,可搭配 Pure Function 繼續處理。

HTML 之 Radio

Radio 必須點到 方框 才能選取,實務上會想要點擊 Label 也相當於選擇 Radio,可將 <input><label> 合作達成。

使用 transduce() 加速 Function Pipeline

FP 常被人詬病效率問題,若使用 pipe() 組合了 3 個 Function,由於 Pure Function 每次都回傳全新 Array,因此要執行三次 Loop,在 Array 筆數大時有明顯劣勢,透過 transduce() 只要執行一次 Loop 即可。

使用 Composition Law 處理 Promise

ECMAScript 2015 的最大亮點之一就是提出 Promise 這種 未來值 概念避免 Callback Hell,但很多人卻很依賴 async await 將 Promise 立即轉為一般值處理,事實上可使用 Pure Function 在 Promise 內處理,並直接以 pipe() 組合 Pure Function。

使用 then() 讓 Promise 也能 Pipeline

ECMAScript 2015 的 Promise 自帶 then(),讓我們能類似 Functor 的 map() 或 Monad 的 chain() 直接修改 Promise 內部資料,唯 then() 是 Method Chaining 而不是 Function Pipeline,因此 Ramda 提供 Function 版的 then()