Jacques Garrigue a écrit : > From: Christophe Raffalli > >> Can someone explain to me why the two following functions are typed so >> differently: >> >> --------------- >> Objective Caml version 3.10.0 >> >> # let f = function >> `T, y -> y >> | x, `T -> x >> | `F, `F -> `F >> | `F, _ -> `F >> ;; >> Warning U: this match case is unused. >> val f : [ `F | `T ] * [ `F | `T ] -> [ `F | `T ] = >> >> # let g = function >> `T, y -> y >> | x, `T -> `F >> | `F, `F -> `F >> | `F, _ -> `F >> ;; >> val g : [< `F | `T ] * ([> `F | `T ] as 'a) -> 'a = >> >> ------- >> >> The decision to close the second column seems to depend upon the >> right hand side of the pattern, which seems excluded by Jacques >> Garrigue's paper about deep pattern matching ... According to this >> paper, the second function is strangely typed. What is implemented >> in OCaml ? >> > > It is implemented, and correctly I believe. > The above behaviour was correctly explained by Martin Jambon, but I'll > add some detail: > The type of f is actually an instance of the type of g, where the > first and second columns of the pattern were unified. The reason for > that is that in f the 1st line returns the 2nd column, and the 2nd > line the first column. Since the return type has to be unique, this > unifies x and y, i.e. the 1st and 2nd columns. > > I hope this clarifies the situation. > > Jacques Garrigue > OK, I understand. But I would prefer if the decision to close or not the pattern (and therefore make the last case useless) did not depend upon the right members ... Cheers, -- Christophe Raffalli Universite de Savoie Batiment Le Chablais, bureau 21 73376 Le Bourget-du-Lac Cedex tel: (33) 4 79 75 81 03 fax: (33) 4 79 75 87 42 mail: Christophe.Raffalli@univ-savoie.fr www: http://www.lama.univ-savoie.fr/~RAFFALLI --------------------------------------------- IMPORTANT: this mail is signed using PGP/MIME At least Enigmail/Mozilla, mutt or evolution can check this signature. The public key is stored on www.keyserver.net ---------------------------------------------