2017-07-12 28 views
1

Wikipedia's list of programming languages with algebraic data types (ADTs)は、本当にRustにADTがあることを示唆していますが、これがRustに当てはまる理由についての私の解釈が正しいかどうかはわかりません。Rust型システムが代数データ型(ADT)をサポートすることを示す方法は?

: - ルスト!) - 何の値を取得していないタイプ

  • ゼロ(またはボイド)私はそれを理解し、そのいずれかを言うために、1つを持っている必要のADTを持っています。
  • 1つ(またはユニット) - ()はRustにあります) - 1つの値を取得するタイプ:()

操作

  • 添加 - Rustのenum { A, B }からAの値またはBの値を返すことができ、操作。
  • 倍音 - ABのすべての組み合わせを返すことができる錆 - 操作のタプル(A, B)

ルール

  • a + b = b + aenum { A, B } =~ enum { B, A }
  • a * b = b * a(A, B) =~ (B, A)
  • 0 + x = xenum { !, A } =~ enum { A }
  • 0 * x = 0
  • (!, A) =~ !
  • 1 * x = x((), A) =~ A

ここA =~ Bfn(A) -> Bfn(B) -> A

があることを意味するには、錆の型システムは、真のADTをサポート、または私はそれについて何かが足りないか、誤解していますなぜのための上記の私の記述ですか?

+3

'!'は実際には安定したRustの型ではありませんが、空の 'enum'を"ゼロ "型として使うことができます。私はゼロ型は、言語が代数的データ型を持つ必要があるとは思わないが、つまり、あなたの質問は何ですか? – interjay

+0

私の実際の質問は編集の1つで削除されました。それは今戻っている。 –

+1

あなたの実際の質問は削除されていませんでした*、それは質問の回答サイトに所属する投稿のタイトルに移動されました。 「錆の代数データ型」のような名詞の束は適切な質問ではありません。それ以来、あなたはタイトルを変更しています(それは問題を残しているので、それは良いことです)。 – Shepmaster

答えて

1

RustのタイプシステムがADTをサポートする理由は何ですか?また、何か不足していると誤解していますか?

はい、これはほぼ正しいです。 1つの変更はVoidenumと表現することです。 interjayはコメントで言ったように、!が安定錆(yet)の一部ではありません。

enum Void {} // uninhabited 

残りは簡単に次の、と私は答えは、あなたの中で自分自身を行っているよりも、より良い、それを表現することができることはよく分かりません質問。

関連する問題