Que devrait donner > sqr = lambda x -> x * x; alors ?
Pas qqch de type pexp, mais qqch de type "pexp-level declaration". E.g. qqch de type (pvar * pexp * bool).
let sqr = lambda x -> x * x in sqr
Est bien parsé sans Pcall
Good.
mais c'est parce que Plet est parsé de façon différente. Je pense que l'erreur doit venir de pexp. Le dernier pattern matché est:
Je pense que le problème vient de comment est appelé "pexp". Quand on lit un "top-level thingy" il faut appeler pexp_p_decl, et non pexp_parse. À ce que je vois, c'est effectivement ce qu'on fait dans main.ml, donc je ne vois pas d'où vient le problème.
| Node (f, args) -> Pcall (pexp_parse f, args)
Donc tout les patterns qui sont inconnus devienne des PCall.
C'est correct pour pexp_parse. C'est seulement l'appel*ant* qui peut savoir si on est dans un contexte où on attend une déclaration ou une expression (qui sont deux catégories syntaxique différentes [ et d'ailleurs on va vouloir pouvoir définir des macros différentes pour ces catégories différentes ] ).
Stefan