圏論

数学の一分野。対象(object)と射(morphism)、その合成と恒等射からなる「圏」を基本に、構造を中身でなく射の振る舞いで捉える。関数型プログラミングでは「型=対象・関数=射」とする圏が、Monad 等の抽象の共通言語になる。

圏の定義

例: Set(集合と関数)、Hask(型と関数)、半順序(対象=要素・射=≤)、モノイド(対象1つ・射=要素)。

プログラミングとの対応

圏論プログラミング
対象型
射関数
関手(Functor F: C→C)map を持つ型構築子(高階多相)
自然変換関手間の多相関数([a] -> Maybe a 等)
積 / 余積直積・タプル / 直和・ADT
始対象 / 終対象Void / Unit
指数対象 B^A関数型 A -> B

中心的な概念

なぜ FP に効くか

多くの抽象が「同じ圏論的構造の別インスタンス」と分かり、法則(functor 則・monad 則)が設計の指針になる。一方、実用に圏論は必須ではない(過度な抽象化は偶有的複雑性を増やしうる)。共通パターンの整理と法則の根拠として使うのが勘所。

関連

Graph