* [Caml-list] In 3.12 and 4.0, erratic message "The implementation tt.ml does not match the interface tt.cmi" @ 2012-07-04 22:54 Jean-Louis Giavitto 2012-07-06 19:36 ` [Caml-list] Problem of type equality in a single definition (was: In 3.12 and 4.0, erratic message "The implementation tt.ml does not match the interface tt.cmi") Jean-Louis Giavitto 0 siblings, 1 reply; 3+ messages in thread From: Jean-Louis Giavitto @ 2012-07-04 22:54 UTC (permalink / raw) To: caml-list Hello. if anyone could give me some hints on the following problem... I have a file tt.ml which reduces to type typedef = { isa : 'a 'rep 'cell . (('rep, int, int, int, int, int) #Collection.collection as 'a); } The mli file is exactly the same has the ml file. 'collection' is a virtual class declared in file collection.ml and signature in collection.mli. tt.ml compile without problems. However, if I replace (in tt.ml and tt.mli) one of the 'int' parameter by a type variable: type typedef = { isa : 'a 'rep 'cell . (('rep, 'cell, int, int, int, int) #Collection.collection as 'a); } then I have the following message (with the 4.0 compiler): File "tt.ml", line 1: Error: The implementation tt.ml does not match the interface tt.cmi: Type declarations do not match: type typedef = { isa : 'a 'rep 'cell. ('rep, 'cell, int, int, int, int) #Collection.collection as 'a; } is not included in type typedef = { isa : 'a 'rep 'cell. ('rep, 'cell, int, int, int, int) #Collection.collection as 'a; } File "tt.ml", line 2, characters 5-112: Actual declaration The types for field isa are not equal. - The problem appears with the compiler 3.12 but also 4.0 (a similar error (5622) was reported but was not reproducible with 4.0). - I have no problem if I drop the .mli file. - The error seems sensitive to the definition of the class 'collection': I was not able to reproduce it with a much simpler definition of collection. - I have the same error if I replace more 'int' parameter by type variables. Have you any clues? Jean-Louis Giavitto. ^ permalink raw reply [flat|nested] 3+ messages in thread
* [Caml-list] Problem of type equality in a single definition (was: In 3.12 and 4.0, erratic message "The implementation tt.ml does not match the interface tt.cmi") 2012-07-04 22:54 [Caml-list] In 3.12 and 4.0, erratic message "The implementation tt.ml does not match the interface tt.cmi" Jean-Louis Giavitto @ 2012-07-06 19:36 ` Jean-Louis Giavitto 2012-07-07 0:13 ` Jacques Garrigue 0 siblings, 1 reply; 3+ messages in thread From: Jean-Louis Giavitto @ 2012-07-06 19:36 UTC (permalink / raw) To: caml-list [-- Attachment #1: Type: text/plain, Size: 3508 bytes --] Dear all, I have circumscribed my initial problem and I am able to produce it on a simple case. I have a signature Classdef.mli restrcted to class virtual ['a, 'b, 'c] cl0 : object constraint 'c = < m : 'a -> 'b -> int; .. > end class virtual ['a, 'b] cl1 : object method virtual m : 'a -> 'b -> int method virtual raise_trouble : 'a end class virtual ['a, 'b] cl2 : object method virtual as_cl0 : ('a, 'b, ('a, 'b) cl1) cl0 end then, in another module that contains only the following type declaration type refer = { poly : 'a 'b 'c . (('b, 'c) #Classdef.cl2 as 'a); } raise the error: File "anotherModule.ml", line 1, characters 0-1: Error: The implementation anotherModule.ml does not match the interface (inferred signature): Type declarations do not match: type refer = { poly : 'a 'b 'c. ('b, 'c) #Classdef.cl2 as 'a; } is not included in type refer = { poly : 'a 'b 'c. ('b, 'c) #Classdef.cl2 as 'a; } The types for field poly are not equal. Note that - if I suppress the method raise_trouble - or if neither 'a nor 'b appear in the type of this method, then everything works fine. Can someone explain to me this behavior? (the two files are in the attached tarball): . First, I don't understand which instances of type poly are compared: there is only one single definition of this type and no use. . And second, I don't understand why adding a method will change the behavior. Many thanks in advance, Jean-Louis Giavitto ------------------------------------------------------- Le 22/07/64 20:59, Jean-Louis Giavitto a écrit : > Hello. > if anyone could give me some hints on the following problem... > > > I have a file tt.ml which reduces to > > type typedef = { > isa : 'a 'rep 'cell . > (('rep, int, int, int, int, int) #Collection.collection as 'a); > } > > The mli file is exactly the same has the ml file. 'collection' is a > virtual class declared in file collection.ml and signature in > collection.mli. > > tt.ml compile without problems. However, if I replace (in tt.ml and > tt.mli) one of the 'int' parameter by a type variable: > > type typedef = { > isa : > 'a 'rep 'cell . > (('rep, 'cell, int, int, int, int) #Collection.collection > as 'a); > } > > then I have the following message (with the 4.0 compiler): > > File "tt.ml", line 1: > Error: The implementation tt.ml does not match the interface tt.cmi: > Type declarations do not match: > type typedef = { > isa : > 'a 'rep 'cell. > ('rep, 'cell, int, int, int, int) #Collection.collection as 'a; > } > is not included in > type typedef = { > isa : > 'a 'rep 'cell. > ('rep, 'cell, int, int, int, int) #Collection.collection as 'a; > } > File "tt.ml", line 2, characters 5-112: Actual declaration > The types for field isa are not equal. > > > - The problem appears with the compiler 3.12 but also 4.0 (a similar > error (5622) was reported but was not reproducible with 4.0). > - I have no problem if I drop the .mli file. > - The error seems sensitive to the definition of the class 'collection': > I was not able to reproduce it with a much simpler definition of > collection. > - I have the same error if I replace more 'int' parameter by type > variables. > > Have you any clues? > Jean-Louis Giavitto. -- Jean-Louis Giavitto Ircam CNRS UMR STMS 9912 – UPMC – Inria 1, place Igor Stravinsky, 75004 Paris http://repmus.ircam.fr/giavitto http://mgs.spatial-computing.org [-- Attachment #2: PbWithPolymorphicField.tgz --] [-- Type: application/x-gzip, Size: 487 bytes --] ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Caml-list] Problem of type equality in a single definition (was: In 3.12 and 4.0, erratic message "The implementation tt.ml does not match the interface tt.cmi") 2012-07-06 19:36 ` [Caml-list] Problem of type equality in a single definition (was: In 3.12 and 4.0, erratic message "The implementation tt.ml does not match the interface tt.cmi") Jean-Louis Giavitto @ 2012-07-07 0:13 ` Jacques Garrigue 0 siblings, 0 replies; 3+ messages in thread From: Jacques Garrigue @ 2012-07-07 0:13 UTC (permalink / raw) To: jean-louis.giavitto; +Cc: Mailing OCaML I could reproduce this bug with 3.11 and 3.12. It appears to be fixed in the latest version of 4.00 (and trunk). (By the way, bugs should go to the bug tracker...) Jacques Garrigue On 2012/07/07, at 4:36, Jean-Louis Giavitto wrote: > Dear all, > I have circumscribed my initial problem and I am able to produce it on a simple case. > > > I have a signature Classdef.mli restrcted to > > class virtual ['a, 'b, 'c] cl0 : > object > constraint 'c = < m : 'a -> 'b -> int; .. > > end > > class virtual ['a, 'b] cl1 : > object > method virtual m : 'a -> 'b -> int > method virtual raise_trouble : 'a > end > > class virtual ['a, 'b] cl2 : > object > method virtual as_cl0 : ('a, 'b, ('a, 'b) cl1) cl0 > end > > then, in another module that contains only the following type declaration > > type refer = > { > poly : 'a 'b 'c . (('b, 'c) #Classdef.cl2 as 'a); > } > > raise the error: > > File "anotherModule.ml", line 1, characters 0-1: > Error: The implementation anotherModule.ml > does not match the interface (inferred signature): > Type declarations do not match: > type refer = { poly : 'a 'b 'c. ('b, 'c) #Classdef.cl2 as 'a; } > is not included in > type refer = { poly : 'a 'b 'c. ('b, 'c) #Classdef.cl2 as 'a; } > The types for field poly are not equal. > > > Note that > - if I suppress the method raise_trouble > - or if neither 'a nor 'b appear in the type of this method, > then everything works fine. > > Can someone explain to me this behavior? (the two files are in the attached tarball): > . First, I don't understand which instances of type poly are compared: > there is only one single definition of this type and no use. > . And second, I don't understand why adding a method will change the > behavior. > > Many thanks in advance, > Jean-Louis Giavitto > > > > ------------------------------------------------------- > Le 22/07/64 20:59, Jean-Louis Giavitto a écrit : >> Hello. >> if anyone could give me some hints on the following problem... >> >> >> I have a file tt.ml which reduces to >> >> type typedef = { >> isa : 'a 'rep 'cell . >> (('rep, int, int, int, int, int) #Collection.collection as 'a); >> } >> >> The mli file is exactly the same has the ml file. 'collection' is a >> virtual class declared in file collection.ml and signature in >> collection.mli. >> >> tt.ml compile without problems. However, if I replace (in tt.ml and >> tt.mli) one of the 'int' parameter by a type variable: >> >> type typedef = { >> isa : >> 'a 'rep 'cell . >> (('rep, 'cell, int, int, int, int) #Collection.collection >> as 'a); >> } >> >> then I have the following message (with the 4.0 compiler): >> >> File "tt.ml", line 1: >> Error: The implementation tt.ml does not match the interface tt.cmi: >> Type declarations do not match: >> type typedef = { >> isa : >> 'a 'rep 'cell. >> ('rep, 'cell, int, int, int, int) #Collection.collection as 'a; >> } >> is not included in >> type typedef = { >> isa : >> 'a 'rep 'cell. >> ('rep, 'cell, int, int, int, int) #Collection.collection as 'a; >> } >> File "tt.ml", line 2, characters 5-112: Actual declaration >> The types for field isa are not equal. >> >> >> - The problem appears with the compiler 3.12 but also 4.0 (a similar >> error (5622) was reported but was not reproducible with 4.0). >> - I have no problem if I drop the .mli file. >> - The error seems sensitive to the definition of the class 'collection': >> I was not able to reproduce it with a much simpler definition of >> collection. >> - I have the same error if I replace more 'int' parameter by type >> variables. >> >> Have you any clues? >> Jean-Louis Giavitto. > > > -- > Jean-Louis Giavitto > Ircam CNRS UMR STMS 9912 – UPMC – Inria > 1, place Igor Stravinsky, 75004 Paris > > http://repmus.ircam.fr/giavitto > http://mgs.spatial-computing.org > > -- > Caml-list mailing list. Subscription management and archives: > https://sympa-roc.inria.fr/wws/info/caml-list > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs > > <PbWithPolymorphicField.tgz> ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-07-07 4:47 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2012-07-04 22:54 [Caml-list] In 3.12 and 4.0, erratic message "The implementation tt.ml does not match the interface tt.cmi" Jean-Louis Giavitto 2012-07-06 19:36 ` [Caml-list] Problem of type equality in a single definition (was: In 3.12 and 4.0, erratic message "The implementation tt.ml does not match the interface tt.cmi") Jean-Louis Giavitto 2012-07-07 0:13 ` Jacques Garrigue
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox