Extensible Effects in Scala Freer Monads, More Extensible Effects で紹介される Eff モナドを Scala を使って解説します。 Contents Free Monad Freer Monad Efficient Freer Eff Monad (Extensible Freer) Free Monad Free はパラメータに Functor のインスタンスを与えることでモナドになるデータ型です。 Functor の定義から見ていきましょう。 trait Functor[F[_]] { def map[A, B](fa: F[A])(f: A => B): F[B] } 計算コンテナ F に対して map という関数が定義されます。 map は F[A] の計算値 A に関数 A => B を適用し F[B] を得ます。