はじめに Haskell等でモナドという概念に触れていることを前提とします。 またこの記事では圏論の基礎的な知識を仮定します (クライスリ圏とかモノイド対象とかいう用語は出てこないから安心して!)。 私自身は情報系出身ではないため、計算機科学については詳しくありません。あくまで自分なりの理解を記したに過ぎないことをご了承ください。 参考文献 圏論の歩き方 この本ではでは圏論が各分野でどんなふうに使われているかがさらっと解説されています。 第5章は「モナドと計算効果」というタイトルで書かれています。 モナド則とは Haskell における型クラス Monad とは次のようなものです。 class Monad m where (>>=) :: forall a b. m a -> (a -> m b) -> m b return :: a -> m a ただし 2 つの関数 (>>=) と r