From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id UAA00968; Wed, 3 Oct 2001 20:23:17 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id UAA01118 for ; Wed, 3 Oct 2001 20:23:16 +0200 (MET DST) Received: from sundown.cs.cornell.edu (sundown.cs.cornell.edu [128.84.96.20]) by concorde.inria.fr (8.11.1/8.10.0) with ESMTP id f93INEf10916; Wed, 3 Oct 2001 20:23:15 +0200 (MET DST) Received: from cs.cornell.edu (dhcp99-32.cs.cornell.edu [128.84.99.32]) by sundown.cs.cornell.edu (8.11.3/8.11.3/R-3.6) with ESMTP id f93INDi24089; Wed, 3 Oct 2001 14:23:13 -0400 (EDT) Message-ID: <3BBB5791.F2B66FC6@cs.cornell.edu> Date: Wed, 03 Oct 2001 14:23:13 -0400 From: Dan Grossman X-Mailer: Mozilla 4.76 [en] (Windows NT 5.0; U) X-Accept-Language: en MIME-Version: 1.0 To: Luc Maranget CC: caml-list Subject: Re: [Caml-list] Pattern matcher no more supposed to warn on non References: <200110031807.UAA0000026808@beaune.inria.fr> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk Luc Maranget wrote: > Argl.... > > Dear Dan, which result would you consider to be correct ? > (1111 ?) > Please tell me... > (Note that I see no consitency either in 3.02 or 3.00,) > > Cheers, thanks, and argl again ! > > --Luc If this problem is worth fixing, I suggest that only 1111 or 4444 are reasonable answers. I tend to prefer 1111. For fixing the exhaustiveness-checker and pattern-compiler, it's probably easiest to do the most expensive thing: the presence of a when clause basically invalidates the failure of all previous cases -- it's like they weren't there. Note that no change needs to be made except when the pattern's type includes a mutable field. Further note that threads are even harder to deal with -- they effectively can put evil when clauses everywhere. My familiarity with the ocaml run-time is rusty, but perhaps a pattern-match (where the pattern's type includes a mutable field) could be "rolled back" when the thread is restarted. Of course, you can't re-execute any when clauses! :-) --Dan > > It is worth a warning in the manual, at least... > > > > > =============== > > > > type y = {mutable c:bool} > > type x = {a:y; b:y} > > > > let f1 (v:x) = > > match v with > > {a = _; b = _} when (v.a.c <- false; v.b.c <- false; false) -> 0 > > | {a = {c=false}; b = {c=false}} -> 1 > > | {a = {c=false}; b = {c=true}} -> 2 > > | {a = {c=true}; b = {c=false}} -> 3 > > | {a = {c=true}; b = {c=true}} -> 4 > > > > let f2 (v:x) = > > match v with > > {a = {c=true}; b = _} when (v.a.c <- false; v.b.c <- false; false) -> 0 > > | {a = {c=false}; b = {c=false}} -> 1 > > | {a = {c=false}; b = {c=true}} -> 2 > > | {a = {c=true}; b = {c=false}} -> 3 > > | {a = {c=true}; b = {c=true}} -> 4 > > > > let f3 (v:x) = > > match v with > > {a = _; b = {c=true}} when (v.a.c <- false; v.b.c <- false; false) -> 0 > > | {a = {c=false}; b = {c=false}} -> 1 > > | {a = {c=false}; b = {c=true}} -> 2 > > | {a = {c=true}; b = {c=false}} -> 3 > > | {a = {c=true}; b = {c=true}} -> 4 > > > > let f4 (v:x) = > > match v with > > {a = {c=true}; b={c=true}} when (v.a.c <- false; v.b.c <- false; false) > > -> 0 > > | {a = {c=false}; b = {c=false}} -> 1 > > | {a = {c=false}; b = {c=true}} -> 2 > > | {a = {c=true}; b = {c=false}} -> 3 > > | {a = {c=true}; b = {c=true}} -> 4 > > > > let main () = > > let v1:x = {a = {c=true}; b = {c=true}} in > > let v2:x = {a = {c=true}; b = {c=true}} in > > let v3:x = {a = {c=true}; b = {c=true}} in > > let v4:x = {a = {c=true}; b = {c=true}} in > > print_int (f1 v1); > > print_int (f2 v2); > > print_int (f3 v3); > > print_int (f4 v4) > > > > let _ = main () > > ------------------- > > Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ > > To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr > > -- | Dan Grossman www.cs.cornell.edu/home/danieljg H:607 256 0724 | | 5157 Upson Hall danieljg@cs.cornell.edu O:607 255 9834 | ------------------- Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr