Ocamlでは、異なるアリティを持つタプルは異なる型と値のコンストラクタを持っています:
# let a = (1, 2, 3);;
val a : int * int * int = (1, 2, 3)
# let b = (1, (2, 3));;
val b : int * (int * int) = (1, (2, 3))
2番目の例(b)は、最初の(a)よりも柔軟性があることに注意してください。これは、bの「テール」-(2、3)-自体が有効な値であるためです。
# let (_, c) = b;;
val c : int * int = (2, 3)
# let d = snd b;;
val d : int * int = (2, 3)
「(1、2、3)」を「(1、(2、3))」として解析せず、代わりに、さまざまなアリティに対して無限(またはさらに悪いことに有限)の新しい型および値コンストラクターを導入する理由は何ですか? ?