caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] Abstract type over modules
@ 2002-11-17 11:02 Johan Baltié
  2002-11-17 23:48 ` Jacques Garrigue
  0 siblings, 1 reply; 2+ messages in thread
From: Johan Baltié @ 2002-11-17 11:02 UTC (permalink / raw)
  To: caml-list

I'm having a strange problem with an abstract type used in 2 modules.

The problem can be summarized as:

************************* test1.mli ************************* 
type toto

val test : toto -> toto

************************* test2.mli ************************* 
open Test1

val test2 : toto -> toto

************************* test1.ml ************************* 

 type toto = int

let test a = (Test2.test2 a) 

************************* Compiling ************************* 
> ocamlc -v                               
The Objective Caml compiler, version 3.06
Standard library directory: /usr/local/lib/ocaml

> ocamlc -c test1.mli
> ocamlc -c test2.mli
> ocamlc -c test1.ml

The implementation test1.ml does not match the interface test1.cmi:
Values do not match:
  val test : Test1.toto -> Test1.toto
is not included in
  val test : toto -> toto


Does anyone encounter this kind of problem ?

-- 
Ciao

Jo

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [Caml-list] Abstract type over modules
  2002-11-17 11:02 [Caml-list] Abstract type over modules Johan Baltié
@ 2002-11-17 23:48 ` Jacques Garrigue
  0 siblings, 0 replies; 2+ messages in thread
From: Jacques Garrigue @ 2002-11-17 23:48 UTC (permalink / raw)
  To: johan.baltie; +Cc: caml-list

From: Johan Baltié <johan.baltie@wanadoo.fr>

> I'm having a strange problem with an abstract type used in 2 modules.
> 
> The problem can be summarized as:
> 
> ************************* test1.mli ************************* 
> type toto
> 
> val test : toto -> toto
> 
> ************************* test2.mli ************************* 
> open Test1
> 
> val test2 : toto -> toto
> 
> ************************* test1.ml ************************* 
> 
>  type toto = int
> 
> let test a = (Test2.test2 a) 

OCaml does not allow mutual recursion between modules.
This prohibition is not strictly enforced (you can actually compile
test2.mli before test1.ml), but the problem appears when you try to
use the recursion.
Here the trouble is that, inside Test1, toto and Test1.toto are not
the same type: we still don't know that we are defining Test1, so
Test1.toto is just another type from another module named Test1.
Merging the two modules is probably the simplest workaround.

---------------------------------------------------------------------------
Jacques Garrigue      Kyoto University     garrigue at kurims.kyoto-u.ac.jp
		<A HREF=http://wwwfun.kurims.kyoto-u.ac.jp/~garrigue/>JG</A>
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2002-11-17 23:49 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-11-17 11:02 [Caml-list] Abstract type over modules Johan Baltié
2002-11-17 23:48 ` Jacques Garrigue

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).