Questa è una delle parti problematiche della sintassi OCaml, secondo me. Nonostante il suo aspetto, il costruttore Foo non richiede una tupla di 2 come argomento. Richiede, sintatticamente, due valori tra parentesi - ma non sono una tupla. Quindi è semplicemente il caso che t
ha il tipo sbagliato. Il modo di fare questo lavoro è quello di dire:
let (a, b) = t in Foo (a, b)
Il problema è davvero che le parentesi sono utilizzate per due cose diverse (o almeno così mi dicono). Una volta che ci si abitua a questo non è così difficile da affrontare.
Edit: se si desidera il costruttore Foo di prendere una singola tupla, piuttosto che due valori distinti, è possibile definire in questo modo:
type foo = Foo of (int * int)
Poi il resto del codice originale sarà lavoro.
fonte
2012-03-19 17:33:55
Le parentesi sono utilizzate per più di due cose! Fanno anche l'esempio dell'OP come-è se cambia solo 'type foo = Foo of (int * int)' –
Sì, ho aggiunto questo in una modifica appena prima di commentare (non che ho bisogno di ottenere il credito o qualcosa :-). –
Grazie per la spiegazione! – Ricardo