Browse thread
Re: parameterized signatures
- Markus Mottl
[
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: | Markus Mottl <mottl@m...> |
| Subject: | Re: parameterized signatures |
Hello,
> Is there a way to refer to the type of a functor defined by a .mli file
> in another .mli file?
> =====> the problem area. How do I express the type of this module?
> module type Wgraph = Pgraph.S ???
Acessing .mli-files as signatures is currently not possible. If I remember
right, I have already asked once whether this could be allowed, but I was
told that this would cause confusions about module names and module-type
names.
Therefore, if I use functors I normally do not use an .mli-file to restrict
the interface, but split up the code in something like:
foo_intf.ml
foo_impl.ml
and restrict the modules/functors explicitely.
"foo_intf.ml" contains, for example:
module type SPEC = sig ... end
module type T = sig ... end
and "foo_impl.ml":
open Foo_intf
module Make (Spec : SPEC) : (T with ...) = struct ... end
Sometimes it is necessary to "reexport" types from the "specification"
module.
Then I do this like:
module Make (Spec_ : SPEC) : (T with ...) = struct
module Spec = Spec_
open Spec
...
end
Of course, the signature T will then have to include something like:
module type SPEC = sig ... end
module type T = sig
module Spec : SPEC
open Spec
end
and will thus make available all types in "Spec".
I hope this helps!
Best regards,
Markus Mottl
--
Markus Mottl, mottl@miss.wu-wien.ac.at, http://miss.wu-wien.ac.at/~mottl