((vname * lexp * ltype) list list * elab_context)
Ce type décrit une liste de listes de déclarations, combinée à un context d'élaboration (qui devrait être le résultat de la combinaison du contexte d'entrée avec les déclaration renvoyées).
Il s'agit s'une liste de listes, parce que dans
x = 1;
odd x = ... even y ...; even x = ... odd y ...;
add x = x + 1;
il y a 3 parties: la déclaration de `x` suivis des déclarations simultanées de `even` et `odd` suivies de la déclaration de `add`. Donc un fichier va correspondre à un liste de déclarations séquentielles, ou chaque élément est un eliste (non vide) de déclarations simultanées (qui permet la récursion mutuelle).
Chaque déclaration est représentée par le triplet (vname * lexp * ltype) où le premier élément donne le nom (utilisé seulement à but de débogage), le deuxième donne la définition elle même et le troisième donne le type de cette définition. Donc pour la première ligne ci-dessus on pourrait avior qqch équivalent à (Some "x", Imm 1, Builtin Int).
Stefan