言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

スタック言語 Joy と、Arrow と圏論の関係についての素描

大島さんに、Arrow でスタック言語が書けたところで Arrow がスタック言語であるとは言えないのでは無いかとの指摘を受けたので考えを書き散らかす。ここで、スタック言語とは、

  • 構成要素が全てコンビネータ(外部変数を含まない関数)である。
    • 例えば Haskell では数字の 4 は関数では無いので、4 2 は意味を成さない。Joy では 4 2 は二つの値を返す関数である。
  • プログラムは関数合成である。
  • 実行呼び出しは正格で、スタック操作(一つのリストしかメモリが無い)として記述出来る。これは無理かも知れないので努力目標。

スタック言語のプログラムは関数合成なので、Arrow で記述出来る事は当然なんだけど、Arrow 又は圏論それ自体ががスタック言語と同じかというと行き過ぎた話で、でも「逆に考えて」圏論を全て記述出来るくらいスタック言語を拡張したいと思っている。具体的な利点としては、例えば関数型言語で一番むかつくのが、型がファーストクラスオブジェクトじゃ無い所なので、Smalltalk のように型の演算も出来るようにする。Int Int + => Int みたいな。で、あと前に買った圏論の本は難しすぎて何が書いてあるのか分からないので、「頭の中に入る大きさ」の自作 Joy で全部書き直す。morphism == id morphism == morphism id みたいな。