typelevel cats 學習筆記 2

前陣子把 Scala with Cats 這本由 underscore.io 寫的 typelevel-cats 的書看完了。

看完前兩章的第一個想法是這群傢伙怎麼時間這麼多,把整個 Scala Collection Library 內的 === |+|  map fold 等函式,重新用 type class 實作一次,時間是不是太多了。

然後再深想一下,這麼累的原因是 FP 跟用 OOP 寫成的 collection library 不相容,無法幫任意的 case class 加上額外的功能,因此要用 Type Class (過去叫 Pimp My Library 或 Enrich Class)的方式,來幫任意的 case class 加上一些通用的行為。

那這些行為有那些呢?


Eq: ===
Semigroup: |+|
Functor: map
Monad: flapmap
Foldable: foldLeft
Semigroupal: (F[A], F[B]) => F[(A, B)]

然後還有一些 FP 特有的 Writer , Reader Monad

最後還有大魔王 Monad Transformer ,至於 Monad Transformer 是幹麻的呢?你可以想像是幫你把兩層的 Monad 撥殼用的,利如

for (
a <- Future(Option(1));
b <- Future(Option(2))
) yield (a + b)

如果沒有 OptionT 的存在幫你撥殼的話,上面這段程式碼會變得很噁心。

Leave a comment

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.