コンビネータ・プログラミングと汎コンビネータ/コンビネータ変換子

一般的には:

さらに一般的には:

(n, m)-コンビネータは、(n, m-1)-コンビネータの集合を対象とする圏になる。特に、(0, 1)-コンビネータコンビネータは、(0, 0)-コンビネータ=コンストラクタの集合を対象とする圏になる。

コンビネータを受け取ってコンビネータを返す関数をコンビネータまたはメタコンビネータ〈meta-combinator〉と呼ぶ。

基本コンビネータ基本汎コンビネータにより、ユーザー定義コンビネータを作る行為をコンビネータ・プログラミングと呼ぶ。コンビネータ域コンストラク余域コンストラクの組をプロファイルと呼ぶ。

コンビネータ〈メタコンビネータ〉には次がある。

  1. 縦結合 (;) = Seq
  2. 直積 (×) = Prod
  3. ペア <_, -> = Pair

基本コンビネータに、Dup があるので、

  • Pair(c, d) = Prod(c, d)\circDup

など、汎汎コンビネータは、

  1. 縦結合 SEQ
  2. 直積 PROD
  3. ペア PAIR

これを使うと:

  • Pair = SEQ(Dup, SEQ(Pair, Prod))

無限タワーになる。

それはともかく:

コンビネータであって、コンビネータの圏から別のコンビネータの圏への関手になっているものをコンビネータ変換子と呼ぶ。コンビネータ変換子は、Φ, Ψ, Ξ などのギリシャ文字大文字で表す。

計算論の背景圏はコンビネータ付きの圏である。異なる背景圏は異なるコンビネータ・レパートリーを持っている。コンビネータ変換子で、背景圏のあいだを繋ぐ。