Monadとは、Applicativeであるデータ構造で、(>>=)演算子を提供し、それがMonad法則を満たすものである。 正確に表現するとこうなんですが、「はぁ?」っ感じですよね。「満たすべき法則」とか言われると、まったく理解できません。でも、オススメの形に持っていくための変換規則と捉えると分かりやすいのではないかというのが、この記事の主旨です。 関手 関手法則は以下の2つです: 単位元: id <$> x = x 合成 : f <$> (g <$> x) = (f . g) <$> x 左辺が冗長な形、右辺がオススメの形です。これはいいですよね? Applicative Applicative法則は以下の4つです(<*>は左結合)。 単位元: pure id <*> x = x 準同型: pure g <*> pure x = pure (g x) 交換 : x <*> pure y