* Bug in equality testing? @ 1994-03-20 15:24 John Harrison 1994-03-21 16:36 ` Vale'rie Me'nissier-Morain 1994-03-21 23:46 ` Xavier Leroy 0 siblings, 2 replies; 3+ messages in thread From: John Harrison @ 1994-03-20 15:24 UTC (permalink / raw) To: caml-list; +Cc: John.Harrison Hi, I've come across the following, which unless I am being stupid looks like a bug. The program below produces (in 0.6): true; true; false John. P.S. Thanks for the interesting replies on hash-consing. I'm afraid I am likely to be pestering you with more questions about CAML soon. It's a great system! ********************************************** type Example = Var of string | App of string * Example list;; let DEST = fun (App p) -> p | (Var _) -> failwith "DEST";; let a = DEST(App("X",([]: Example list)));; let b = ("X",([]: Example list));; fst(a) = fst(b);; snd(a) = snd(b);; a = b;; ********************************************** ^ permalink raw reply [flat|nested] 3+ messages in thread
* Bug in equality testing? 1994-03-20 15:24 Bug in equality testing? John Harrison @ 1994-03-21 16:36 ` Vale'rie Me'nissier-Morain 1994-03-21 23:46 ` Xavier Leroy 1 sibling, 0 replies; 3+ messages in thread From: Vale'rie Me'nissier-Morain @ 1994-03-21 16:36 UTC (permalink / raw) To: caml-list It is a well-known bug of the compilation of Caml Light. In fact, the variables a and b are internally represented as: ----- ---- ---- ------ ---- ---- | App | | | and | Pair | | | ----- -/-- --\- ------ -/-- --\- / \ / \ "X" [] "X" [] so the generic equality says these 3-tuples are not equal since their headers are not the same! Valerie Menissier-Morain ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Bug in equality testing? 1994-03-20 15:24 Bug in equality testing? John Harrison 1994-03-21 16:36 ` Vale'rie Me'nissier-Morain @ 1994-03-21 23:46 ` Xavier Leroy 1 sibling, 0 replies; 3+ messages in thread From: Xavier Leroy @ 1994-03-21 23:46 UTC (permalink / raw) To: John Harrison; +Cc: caml-list > I've come across the following, which unless I am being stupid > looks like a bug. Yes, this is described as bug (1) in the file KNOWN-BUGS in the 0.6 distribution. A simple workaround is to change the definition of the DEST function: instead of let DEST = fun (App p) -> p | (Var _) -> failwith "DEST";; write let DEST = fun (App(x,y)) -> (x,y) | (Var _) -> failwith "DEST";; Regards, - Xavier Leroy ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~1994-03-22 10:16 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 1994-03-20 15:24 Bug in equality testing? John Harrison 1994-03-21 16:36 ` Vale'rie Me'nissier-Morain 1994-03-21 23:46 ` Xavier Leroy
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox