> I was thinking it could be very useful for us to have an option
> which rejects toplevel structure definitions without signature
> constraints.
This feels like a very strong restriction. I guess the motivation is
to prevent accidentally exposing identifiers that should be hidden?
Would you require the constraint to be syntactically in the structure
binding, as in
structure S: SIG = ...
or would you only require that the components of the structure have
been constrained at some point? Consider the following.
* structure T: SIG = ...
structure S = T
* structure T: SIG = ...
structure S = T.U
* structure T: SIG = ...
structure S = struct open T end
* structure T: SIG = ...
structure S = struct open T.U end
* structure S = struct ... end : SIG
* structure S = let ... in struct ... end : SIG end
* functor F (): SIG = ...
structure S = F ()
* functor F () = struct ... end : SIG
structure S = F ()
It's not entirely clear to me what you want to do about structure S in
the above situations.