Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
Yet another question about the module system
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Jocelyn Serot <jserot@e...>
Subject: Yet another question about the module system


In a previous post i was asking a few questions about the relations between 
the module system and separate compilation. Thanks to the clever answers of
a few people, i thought i have understood the whole stuff. Until i encounter
the following pb:

Suppose i have 2 files:

A first one, specifying an interface for an abstract type Bar:

****** bar.mli **********
type t
val x :t

A second one, specifying a second abstract type built upon the first one
using functor application

****** foo.mli **********
module type FOO = sig type t val y : t end
module Make(B:Bar) : (FOO with type t = Bar.t)

Trying to compile this separately:

	> ocamlc -c bar.mli
	> ocamlc -c foo.mli

produces the following error message:
	> File "foo.mli", line 3, characters 14-17: Unbound module type Bar

BUT, if write foo.mli like that

****** foo.mli **********
module type FOO = sig type t val y : t end
val y : Bar.t

Everythings compiles ok.
So, it seems that the Bar interface is known when compiling Foo (i guess this
goes trough the bar.cmi file).
Why cannot it be used as a functor argument then ?

	Jocelyn Serot

Es-mail:  (->Nov 29/96) ...............................
S-mail: LASMEA - URA 1793 CNRS, Universite Blaise Pascal, 63177 Aubiere cedex
Tel: (33) - Fax: (33) ...............................