unit と void
unitは×の単位元(1)で、voidは+の単位元(0)
先日の議論 では、unit 型を引数に取るということは、本質的には引数が必要ないんだから arity が 0 じゃないか、と単純に言ってしまいました。でも、unit と void の比較から考えると、確かに引数がいらない関数は、ただひとつの値しかとらない集合からの写像であるわけで、引数は unit 型でありますね。
そして、引き数が void 型だと、決して呼び出せない(関数適用できるケースが存在しない)と。
もちろん、unit を取るか arity = 0 かは思考ゲームでしかなくて、どう定義/表記/操作するかの違いでしかありません。どちらが体系として綺麗なのかが問題です。
しかし、カリー化のことなどを考えた場合、関数の arity が自然数の範囲であれば arity = 1 まで落としてこれますが、arity が 0 の関数という存在を追加した時点で特別なルールが増えてしまいそうでやっぱりよくないですね。
まぁ、型のフレームワークをどう定義するかと、言語の上でどう syntax sugar をちりばめるかとはまた違う話でもあります。
それとも、僕は何か本質的な問題を見過ごしているんでしょうか……。
私信
今日は雑用がいろいろあって、結局 Haskell の勉強はできませんでした。ごめんなさい。> tsuyoshi 氏