Browse thread
RE: first class modules (was: alternative module systems)
- Claudio Russo
[
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: | 2001-01-08 (17:59) |
From: | Claudio Russo <crusso@m...> |
Subject: | RE: first class modules (was: alternative module systems) |
> > For the record, your simplification based on identity of signature > > identifiers > > is probably ok in practice, but it does > > rule out some examples that involve package types with free type > > variables. > > Right. Would it break something to allow named module type with > explicit arguments: > > module type 'a ARRAY = sig > type array > val init: 'a -> array > val sub: array -> int -> 'a > val update : array -> int -> 'a -> array > end > > ? > > Then the unification between < (a1,...,ap) S > and < (b1,...,bq) T > > is solved by equating S = T (syntactically), p=q and unifying > a1=b1,...,ap=bp. I think this would be fine, but you then also have to deal with the meaning of these parameterised signatures in other contexts, eg: functor F(X: ('a -> int) S )= <modexp>; and so on. Is this declaration illegal or should the functor F be implicitly polymorphic in 'a? This is not impossible to deal with, just needs some more work. I suppose you could only allow signature applications in core type expressions of the form < sigexp >, but that seems a little hacky. -c > > -- > Alain Frisch > >