unit と void

d:id:sumii:20051210

unitは×の単位元(1)で、voidは+の単位元(0)

先日の議論 では、unit 型を引数に取るということは、本質的には引数が必要ないんだから arity が 0 じゃないか、と単純に言ってしまいました。でも、unit と void の比較から考えると、確かに引数がいらない関数は、ただひとつの値しかとらない集合からの写像であるわけで、引数は unit 型でありますね。

そして、引き数が void 型だと、決して呼び出せない(関数適用できるケースが存在しない)と。

もちろん、unit を取るか arity = 0 かは思考ゲームでしかなくて、どう定義/表記/操作するかの違いでしかありません。どちらが体系として綺麗なのかが問題です。

しかし、カリー化のことなどを考えた場合、関数の arity が自然数の範囲であれば arity = 1 まで落としてこれますが、arity が 0 の関数という存在を追加した時点で特別なルールが増えてしまいそうでやっぱりよくないですね。

まぁ、型のフレームワークをどう定義するかと、言語の上でどう syntax sugar をちりばめるかとはまた違う話でもあります。

それとも、僕は何か本質的な問題を見過ごしているんでしょうか……。

私信

今日は雑用がいろいろあって、結局 Haskell の勉強はできませんでした。ごめんなさい。> tsuyoshi 氏