タイプシステムにおけるユニットタイプの動作に関する疑問
-
29-09-2020 - |
質問
私はタイプ理論の文脈と異なるケースシナリオでのその使用において単位タイプについて疑問があります。
から始めるには、 nofollow noreferrer">ユニットタイプをヌラリ製品タイプとして見ることができますつまり、空のタプル、()
である1つの値の唯一の値項で単位。また、任意の種類からユニットへの独特のマップが存在します。
今、ユニットタイプの使用がそのような簡単な定義を超えていることが実際には、製品タイプの合計である代数データ型の定義に使用されます。具体的には、列挙型の概念を表すことができます。タイプ、例えばStandardMLでは、:
datatype suit = HEARTS | CLUBS | DIAMONDS | SPADES
.
心臓、クラブ、ダイヤモンド、スペードはヌラリー製品の種類、したがってユニットへのすべてのイオドルフィックです。
私の疑問は次のとおりです。単位の要素が1つしか存在しない場合、タイプシステムは上記のSUMタイプで使用されている4つの異なるインスタンスを区別できますか(空のタプルを考慮した場合は5つのインスタンス)。 私は彼らがすべて同型までのすべての等しいと見なすことができることを理解していますが、彼らはそれらに模索的に一致することを想定しています...
解決
短い答えは、同一の動作にもかかわらず、等間形式の型が等しくないということであるため、タイプシステムはそれらを区別できます。公称型システムでは、あなたが説明するものと同様に、タイプは構造的に同等であっても、その名前によって基本的に識別されます。これはあなたが記述する5つのユニットタイプの場合です。
パターンマッチングの側面は直交していることに注意してください。ほとんどのタイプの理論では、(名目上)等しい2つのタイプの和の合計を取ります。 Unit + Unit
。それでもパターンマッチが必要になり、左のUnit
と右のUnit
が2つあります。名目上の面は重要ではありませんが、多くのプログラミング言語は、サマンドの指標の代わりに(特にあなたが明確な名目タイプの合計を取ることが許可されている言語で)このようなさまざまなケースを区別するために名前を使用します。標準ML)