TL;DR

関手をより拡張した概念。「通常」の値を受け取り「拡張」された値を返す関数(モナディック関数)を、並列に組み合わせられる。

仕組み

apply(Haskell では <*>)を使って、複数のモナディック関数を並列に組み合わせる。この書き方をアプリカティブスタイルと呼ぶ。

(<*>) :: Applicative f => f (a -> b) -> f a -> f b
 
pure g <*> x1 <*> x2 <*> ... <*> xn

Haskell の Control.Applicative のドキュメントでは、アプリカティブを関手とモナドの中間の構造としている。純粋な値を埋め込む pure と、計算を順に行って結果を組み合わせる <*>(または liftA2)を持つ。すべてのアプリカティブは関手である。モナドの >>= を持たないので、モナドより表現力は弱い。その代わり、当てはまる型が多く、実行する前に計算を解析できる。

例

アプリカティブを使うと、複数のエラーを同時(並列)に扱える。

関連

出典