Janusの絵と向き
なんでコンパクト閉圏かと言えば、Janus(ヤヌス)コンポネントを考えたら自然に必然的にコンパクト閉圏になるからだ。
で、絵の向きがあらためて気になって仕方ない。典型的な例として、モデルとエンジンからなるプラットフォーム(DOMとか)とUIにはさまれた対話的コンポネントを考える。まず、横向きの絵を描くとき、左から右に、UI、コンポネント、プラットフォーム、の順にしよう。縦なら、上から下に同じ順序。左→右、上→下を対応させるのは書字方向の観点からは自然だと思う。
プラットフォームとかエンジンとかシステムのことをPで表そう、もともとはproviderだが、もはやどうでもいい、Pだ。同様に、UIのところはUで表す、service userだから。この記号を使うと、コンポネントはP側とU側に顔を持つことになる(双面!)。
メソッド呼び出しを 「caller(利用権限)→ callee(実装義務)」の矢印でかいて、これを呼び出し弧(call-arc)と呼ぶ。呼び出しの出入りは、P側からのcall-in、P側へのcall-out、U側へのcall-out、U側からのcall-inがある。それぞれの典型的な例は:
- P側からのcall-in -- ミューテーションイベント
- P側へのcall-out -- モデル操作API
- U側へのcall-out -- Window System/Toolkiの呼び出し(描画)
- U側からのcall-in -- ユーザーイベント
反応は2種類あり:
- P call-in により、P call-out と U call-out の列が発生する。
- U call-in により、P call-out と U call-out の列が発生する。
これを半分に切ってしまい(P call-in と U call-outだけとか)、イベントとコマンドの引数をナシにしてしまえば、翻訳系と同じになる。つまり、Janusコンポネントはcat-enrichedなコンパクト閉圏の射=1セルとなる。