モジュールの圏
[追記]category of modules って言葉は使えないわ。加群圏だもんな。 [/追記]
ゴグエンの大局的プログラミング(programming in the large)の発想でモジュール計算をしていたら、GoI構成とコンパクト閉圏が出てきてビックリ。
モジュールMとNが提供(provide)している名前をお互いに吸収しあう方法で結合すると、これがGoI構成の8の字結合になる。8の字結合と対角、余対角を組み合わせると、提示する名前を減らさない(privateにしない)結合になる。
再帰的な定義(定義の再帰化)がトレースに対応しているから、モジュール集約をモノイド積、モジュールの直列結合を結合とするレース付きモノイド圏で、名前により自然にGoI構成がなされているらしい。リネームや隠蔽(hiding)なども圏論的な定式化ができる。
それと、モジュール名やパッケージ名による修飾(qualify, prefix)を、直和を作るタギングとして捉えることができる。これを考慮すると、importの構文は:
- import type foo as bar from other.mod prefix m;
リネーミングとプレフィックシングはどちらから一方があれば足りる。リネームはやめてプレフィックシングだけにするほうが単純かも。