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(===/=!=)、OrderPartialOrderShowTrafficLightEq インスタンス定義など。
  • 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-introgame-resource-monoid-haskell と同じ型クラス文化圏。関連: haskell-ghc / _moc-book-notes