2010-05-25 6 views
4

Je suis en train d'écrire quelque chose comme ceci:plusieurs paramètres de type

type 'a 'b xxx = {aaa: 'a: bbb: 'b: ccc: int};;

Il ne compile pas. Est-ce juste erreur de syntaxe, ou ils ne permettent pas plusieurs paramètres sur le type? Alors pourquoi ?

Répondre

13

En ML, les paramètres de type multiples sont écrits entre parenthèses et séparés par des virgules, comme ceci:

type ('a,'b) xxx = {aaa: 'a; bbb: 'b; ccc: int; } 
+0

Je l'ai toujours interprété comme la déconstruction des composantes d'un triple triple/tuple/... En quoi les deux définitions sont-elles différentes? Ou, quelles implications la différence signifie-t-elle? Comment ocaml les utilise-t-il différemment alors? – nlucaroni

+1

nlucaroni: Je crois que c'est juste de la syntaxe. Les types de multiparamètres sont juste que - type paramétré par plusieurs paramètres, le compilateur a seulement besoin de savoir combien de paramètres sont présents. Les types de tuple sont différents - ils définissent une «structure» de la valeur. J'espère que je n'ai pas mal joué avec la terminologie :) – ygrek

3

En fait, vous pouvez écrire comme ça, dans la syntaxe révisée:

 Objective Caml version 3.11.2 

# #load "dynlink.cma";; 
# #load "camlp4r.cma";; 
    Camlp4 Parsing version 3.11.2 

# type xxx 'a 'b = { aaa : 'a; bbb: 'b; ccc: int}; 
type xxx 'a 'b = { aaa : 'a; bbb : 'b; ccc : int } 
1

Les paramètres de type sont définis dans le manual comme:

type-params ::= type-param | (type-param { , type-param }) 

Ainsi, pour un li st des paramètres de type, il s'agit d'une liste séparée par des virgules entre parenthèses.

Questions connexes