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: […]

typelevel cats 學習筆記

最近在學 typelevel/cats 底下這一行程式碼,想了兩天才理解為什麼要寫成這樣,Functional Programming真的是太困難了,有點回到大一學遞迴的感覺。 (Either[Throwable, A]) => Unit) 是一個 Callback function / Listener interface , (CB => Unit) 表示這個 Callback function 可以在不同的 Thread 執行。 為什麼要寫成這樣?我還在想….

我搞不懂你啊 Hibernate

前幾天才在跟同事講用 ORM 的好處,雖然說我常常被 Hibernate 整到,但是被整多了,還是會知道有那些眉角的,結果話才說完兩天就又被整到。 Hibernate 把我一個很簡單的 JPAQL 改寫成一個建立 temp table 再用 sub query 去查尋,本來好好一個用主鍵去改資料只要 5 msec 的查詢,變成要 30sec 才跑得完,慢了六千倍… JPAQL UPDATE ImportJob SET rows = rows + :increase WHERE import_job_id = :jobId AND completed = 0 SQL insert into HT_import_job select importjob0_.import_job_id as import_job_id from import_job importjob0_ where importjob0_.import_job_id=? and importjob0_.completed=0; update import_job set […]