On s'était mis d'accord pour utiliser a qui est plus léger, mais ça ne colle pas bien avec notre représentation interne qui sépare TConstr et TVar:
type foo 'a 'b = int * t 'a 'b
type foo a b = int * t a b
TyProd(TConstr "int", TConstr ("t", [TVar "a"; Tvar "b"]))
Trois choix:
on garde la séparation dans la syntaxe
on fusionne les syntaxes et on change la représentation des types dans le langage (fusion TVar/Tconstr, éventuellement on passe à TApp(TApp(TVar "t", TVar "a"), TVar "b")
on fusionne les syntaxes et on utilie une passe intermédiaire sur les types pour "reconstruire" la structure différenciée
Discussion à ce sujet
Gabriel: je serais assez pour essayer de remplacer Tyvar "a" par TConstr ("a", []).
Olivier: Carine avait ajouté les flèches et les produits dans TConstr, maintenant tout est Tconstr.
Gabriel:
Tout est TConstr mais tout n'est pas une abbréviation.
Question de comment on gère les bindings dans le cas mu.
Gabriel:
Si on suit cette route, on peut se demander comment on gère la curryfication/plusieurs paramètres: TyApp(TyApp(TConstr "t", a), b) ou alors TConstr("t", [a; b])?
On pourrait avoir deux représentations, une moins structurée qui est produite par le parseur et une plus structurée qui est obtenue en "typant" les types.
type foo a b = t a b
=>
TyApp(TyApp(TyVar "t", TVar "a"), TVar "b")
=>
TConstr ("t", [TVar "a"; TVar "b"])
Gabriel: on pourrait laisser ça de côté, expliquer les choix possibles dans une issue et ne pas se forcer à travailler dessus maintenant.
On s'était mis d'accord pour utiliser `a` qui est plus léger, mais ça ne colle pas bien avec notre représentation interne qui sépare `TConstr` et `TVar`:
```
type foo 'a 'b = int * t 'a 'b
type foo a b = int * t a b
TyProd(TConstr "int", TConstr ("t", [TVar "a"; Tvar "b"]))
```
Trois choix:
- on garde la séparation dans la syntaxe
- on fusionne les syntaxes et on change la représentation des types dans le langage (fusion TVar/Tconstr, éventuellement on passe à `TApp(TApp(TVar "t", TVar "a"), TVar "b")`
- on fusionne les syntaxes et on utilie une passe intermédiaire sur les types pour "reconstruire" la structure différenciée
### Discussion à ce sujet
> Gabriel: je serais assez pour essayer de remplacer `Tyvar "a"` par `TConstr ("a", [])`.
>
> Olivier: Carine avait ajouté les flèches et les produits dans `TConstr`, maintenant tout est `Tconstr`.
>
> Gabriel:
> - Tout est `TConstr` mais tout n'est pas une abbréviation.
> - Question de comment on gère les bindings dans le cas `mu`.
>
> Gabriel:
> - Si on suit cette route, on peut se demander comment on gère la curryfication/plusieurs paramètres: `TyApp(TyApp(TConstr "t", a), b)` ou alors `TConstr("t", [a; b])`?
> - On pourrait avoir deux représentations, une moins structurée qui est produite par le parseur et une plus structurée qui est obtenue en "typant" les types.
>
> ```
> type foo a b = t a b
> =>
> TyApp(TyApp(TyVar "t", TVar "a"), TVar "b")
> =>
> TConstr ("t", [TVar "a"; TVar "b"])
> ```
>
> Gabriel: on pourrait laisser ça de côté, expliquer les choix possibles dans une issue et ne pas se forcer à travailler dessus maintenant.
On s'était mis d'accord pour utiliser
a
qui est plus léger, mais ça ne colle pas bien avec notre représentation interne qui sépareTConstr
etTVar
:Trois choix:
TApp(TApp(TVar "t", TVar "a"), TVar "b")
Discussion à ce sujet