Browse thread
[Caml-list] Legality of using module types from .mli in .ml
- Thorsten Ohl
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Thorsten Ohl <ohl@p...> |
| Subject: | [Caml-list] Legality of using module types from .mli in .ml |
I'm often referring to module types defined in an interface file in
order to reduce redundancy. For example
$ cat a.mli
module type T = sig val n : int end
module M : T
$ cat a.ml
module type T = A.T
module M : T = struct let n = 42 end
where T can be rather long. Is this legal? The manual says in
section 6.12
A compilation unit behaves roughly as the module definition
module unit-name : sig unit-interface end = struct unit-implementation end
and refrains from defining `roughly' :-). I came up with conflicting
evidence:
O'Caml accepts it
$ ocamlopt a.mli a.ml
However, it is not equivalent to
module B :
sig
module type T = sig val n : int end
end =
struct
module type T = B.T
module M = struct let n = 42 end
end
which is obviously rejected by O'Caml, since B.T is not bound. The
pair (a.mli, a.ml) more closely resembles
module Aux_C =
struct
module type T = sig val n : int end
end
module type C =
sig
module type T = Aux_C.T
module M : T
end
module C : C =
struct
module type T = Aux_C.T
module M = struct let n = 42 end
end
without binding Aux.T. My question is now: is the pair (a.mli, a.ml)
intentionally legal or do I need to expand the reference A.T, as in
$ cat pedantic_a.mli
module type T = sig val n : int end
module M : T
$ cat pedantic_a.ml
module type T = sig val n : int end
module M : T = struct let n = 42 end
because I've have taken advantage of a bug in the compiler.
The reason I'm asking this, is that my shorthand [as in (a.mli, aml)]
breaks Julien Signoles' defunctorizer.
Cheers,
-Thorsten
--
Thorsten Ohl, Physics Dept., Wuerzburg Univ. -- ohl@physik.uni-wuerzburg.de
http://theorie.physik.uni-wuerzburg.de/~ohl/ [<=== PGP public key here]
-------------------
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