Pour montrer qu'on peut interpréter comme on veut le symbole, l'interprétation attendue était en effet "+", mais on peut aussi prendre la concaténation, et dire que la fonction de « int -> a » c'est « string_of_int ». Cela fait une autre manière d'interpréter la même construction.
Si ça ne fait pas ce qu'on veut, c'était bien la peine de le présenter...
Il fait ce qu'on veut, mais « une seule fois ». En fait, la définition ne permet pas assez de polymorphisme. Ce n'était peut-être pas très clair, mais voici comment le système d'ocaml réagit :
On lui donne cette définition, il est content
On construit une expression avec les deux constructeurs donnés, il est content.
Quand on lui demande le type, il dit 'a expr : parfait !! Seulement, il ne dit pas vraiment ça. Il dit 'a expr pour une certaine valeur de 'a
Quand on évalue l'expression avec (id,+), le gentil compilateur dit : « ok j'ai compris, en fait 'a = int ! ».
Quand on essaie ensuite d'évaluer avec (string_of_int, ^) il dit ... ohlala. 'a = int mais 'a = string ... or string /= int ... je suis perdu !!!
Je trouve que cela valait le coup de le présenter parce qu'en voulant refaire ce que présente la vidéo, je suis tombé dans ce piège parce que je ne connaissait pas la syntaxe en ocaml qui traduirait le forall a. de haskell et je me suis demandé si l'oublier marcherait.
[^] # Re: C'est bien la peine !
Posté par Aluminium95 . En réponse au journal EDSL et F-algèbres. Évalué à 1.
Pour montrer qu'on peut interpréter comme on veut le symbole, l'interprétation attendue était en effet "+", mais on peut aussi prendre la concaténation, et dire que la fonction de « int -> a » c'est « string_of_int ». Cela fait une autre manière d'interpréter la même construction.
Il fait ce qu'on veut, mais « une seule fois ». En fait, la définition ne permet pas assez de polymorphisme. Ce n'était peut-être pas très clair, mais voici comment le système d'ocaml réagit :
'a expr: parfait !! Seulement, il ne dit pas vraiment ça. Il dit'a exprpour une certaine valeur de'a(id,+), le gentil compilateur dit : « ok j'ai compris, en fait'a = int! ».(string_of_int, ^)il dit ... ohlala.'a = intmais'a = string... orstring /= int... je suis perdu !!!Je trouve que cela valait le coup de le présenter parce qu'en voulant refaire ce que présente la vidéo, je suis tombé dans ce piège parce que je ne connaissait pas la syntaxe en ocaml qui traduirait le
forall a.de haskell et je me suis demandé si l'oublier marcherait.