Obj
できません (つまり、モジュールの闇の魔法に頼らなければ)。確かに、2 つの問題があります。まず、OCaml の型システムは、引数の長さに実際に依存する'a list -> ('a * 'a * ... * 'a)
whereのようなものを表すことができません (たとえば、Coq でそのようなことを行うことができます)。...
第二に、OCaml では、n-uple はペアの反復バージョンではありません。つまり、 type の値は typeの値でも'a * 'a * 'a
type の値でもないため、リストの要素から段階的に nuple を構築することはできません。'a * ('a * 'a)
('a * ('a * 'a))
# let x = (1,2,3);;
val x : int * int * int = (1, 2, 3)
# let y = (1,(2,3));;
val y : int * (int * int) = (1, (2, 3))
# let z = (1,2),3;;
val z : (int * int) * int = ((1, 2), 3)
# x = y;;
Error: This expression has type int * (int * int)
but an expression was expected of type int * int * int
# x = z;;
Error: This expression has type (int * int) * int
but an expression was expected of type int * int * int