grammaire: 'a ou a pour les variables de types ? #28

Open
opened 2021-04-30 10:10:32 +02:00 by gasche · 0 comments
Collaborator

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.
Sign in to join this conversation.
No Label
No Milestone
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Olivier/inferno-experimental#28
No description provided.