北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

YAPCで話さなかったこと

今回のトークでは「斜めの矢印」とか「合成」とかそういう言葉を説明に含める必要があったので圏論のことばや記法を前半で色々紹介しましたが、泥沼詳細には踏み込み過ぎないように気をつけました。その泥沼詳細にあえて踏み込んでみたい人のために、このトークに出てきた話と圏論の言葉の対応表を与えておきます。

スライド内の言葉 圏論的な性質
Type(型) 対象
Arrow(矢印)、または、関数
id 恒等
M() 関手の対象関数
モナド = M(), unit, flat_map Kleisli triple*1
斜めの矢印、または、Kleisli射 Kleisli圏
map 関手の射関数
unit 自然変換
flatten 自然変換
M()+map, unit, flatten モナド

さらにM(), unit, flat_mapによって高階関数の成す圏のKleisli圏が構成されるとみなすと、unitはそのKleisli圏の恒等射、flat_mapを介した2つのKleisli射の合成がそのKleisli圏での合成と言えます。

勉強する順番としては、圏(対象、射、恒等射)→関手→自然変換→モナド、が最速です。

*1:プログラミング言語モナドは、数学ではKleisli tripleと呼ばれています。数学のモナドは、後述されている3つ組をいいます。ただし、数学のモナドと数学のKleisli tripleは同値です