モナド

浅海 智晴

用語

モナド

用語(英)

monad

別名

-

定義

モナド(monad)は、値を文脈付きのコンテナで包み、連続的な計算の連鎖を安全に構築するための抽象です。 flatMap(bind)とpure(unit)の2つの操作を中心とし、逐次処理・状態管理・エラー伝播などを関数型スタイルで記述するための構文的枠組みを提供します。

Scala

Catsにおける型クラス Monad の定義は次のようになります。

trait Monad[F[_]] extends FlatMap[F] with Applicative[F] {
  def pure[A](a: A): F[A]
  def flatMap[A, B](fa: F[A])(f: A => F[B]): F[B]
}

この定義により、任意の型 F[_] に対し、 pureflatMap の実装を与えることでモナドとして扱うことができます。 Catsでは、 for 式や >>= 相当の連結操作、 map / flatMap チェーンをこの型クラスによって一般化しています。