Herding Cats
eed3si9n による Scala の関数型ライブラリ cats の入門連載(Haskell の Typeclassopedia を Scala に翻案)。型クラスを軸に Functor から Monad までの抽象化階層を段階的に学ぶ。詳細な型クラス階層は functor-applicative-monad にまとめた。
Day0: 多相性
- パラメトリック多相、派生型による多相、アドホック多相(型クラス)を比較。Scala では
trait CanPlus[A]+implicitで実現する。 sum関数を Monoid → FoldLeft と一般化していく古典的な導入。simulacrum マクロで@typeclass/@op("|+|")によるメソッド注入。
Day1-2: cats の基本型クラス
Eq(===/=!=)、Order、PartialOrder、Show。TrafficLightのEqインスタンス定義など。- typelevel/discipline で型クラス則(Functor 則など)を property-based にチェックできる。
Day3 以降: 高カインド型と Applicative
- Higher-kinded types(
F[_])。Semigroupal/product、Apply/ap、Applicative/pure。 - Haskell の
<$>/<*>/*>/<*と Scala のmapNの対応。Applicative はパーザ開発(Parsec)から派生した。 - Semigroup/Monoid と Foldable(
foldMap)、FlatMap/Monad へ続く。
typeclass-monoid-intro や game-resource-monoid-haskell と同じ型クラス文化圏。関連: haskell-ghc / _moc-book-notes