На мой взгляд, это одна из проблемных частей синтаксиса OCaml.Несмотря на то, как это выглядит, конструктор Foo не требует двух кортежей в качестве аргумента.Синтаксически требуется два значения в скобках - но они не являются кортежами.Так что это просто тот случай, когда t
имеет неправильный тип.Чтобы сделать эту работу, нужно сказать:
let (a, b) = t in Foo (a, b)
Проблема действительно в том, что круглые скобки используются для двух разных вещей (или, как я утверждаю).Как только вы к этому привыкнете, с этим не так уж сложно разобраться.
Редактировать : если вы хотите , то конструктор Foo может взять один кортеж, а не два отдельныхзначения, вы можете определить его следующим образом:
type foo = Foo of (int * int)
Тогда остальная часть вашего исходного кода будет работать.