|Anonymous | Login | Signup for a new account||2014-11-28 05:19 CET|
|Main | My View | View Issues | Change Log | Roadmap|
|View Issue Details|
|ID||Project||Category||View Status||Date Submitted||Last Update|
|0001634||OCaml||OCaml general||public||2003-04-13 06:02||2003-05-05 16:56|
|Target Version||Fixed in Version|
|Summary||0001634: Feature wish: enhanced module constraints|
|Description||Full_Name: Brian Rogoff|
Submission from: 12-234-83-176.client.attbi.com (188.8.131.52)
In the latest round of thrashing over the parameterization trick hack for
encoding mutually recursive type and functor instantiations, an old annoyance
reared it's head again so I decided I'd see if you want to fix it.
The problem is that when we have a signature which exports two types (say,
Set.S, which exports t and elt) and we'd like to enforce that these two types
related like in the following, where Ord.t is obviously a polymorphic type
(* Not legal!!! *)
module MakeRec(Ord: OPEN_ORDERED) : (S with type elt = t Ord.t) =
^-- how to refer to S.t?
the only way I think we can do this now is to expand the signature S out with
type equalities coded in the expanded sig. If that's right, that is a
of the module system, and very un-Caml-like in it's verbosity, as I now have to
repeat the whole signature just to get the type equality I want. I understand
that neither "t" (which t does that refer to) nor "S.t" will work there, but
isn't this just syntax? Can't something like the following, also not legal
OCaml, be made to work?
module MakeRec(Ord: OPEN_ORDERED) : (S with type t and type elt = t Ord.t) =
where we first mention the t so that we know we're talking about the t in the
struct being defined, and then refer to it.
I trust that fixing this is easier than fixing the recursive module problem :-)
|Tags||No tags attached.|
|2005-11-18 10:13||administrator||New Issue|
|Copyright © 2000 - 2011 MantisBT Group|