-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Signature members #39
Comments
When you write "abstract signatures [...] should not be added", I think you mean to ban something like: struct
signature I = sig type t end
structure T = struct type t = int end
end :> sig
signature I (* abstract signature *)
structure T : I
end But what if I write: struct
signature I = sig type t end
structure T = struct type t = int end
end :> sig
signature I = sig end (* signature subtyping *)
structure T : I
end Which seems like the same thing to me. Maybe you want to mandate that signature declarations match specifications exactly, rather than allowing subtyping. Or maybe you want to ban structure specifications in a |
Since signatures can be used in both co- and contra-variant position, allowing subtyping on signature equations would be unsound. The closest you could do is bounded abstract signatures:
But when using this in functor parameters, that would give rise to something at least as expressive as bounded quantification as in F-omega-sub with full forall-subtyping, which we also know is undecidable. |
All these examples in this discussion seem to me to be trying to stretch the existing SML module system design beyond its breaking point. Better to start over from scratch with a well-thought-out and coherent underlying model (but not just F_omega!).
The other problem is “exceeding the conceptual complexity bound” for a reasonable pragmatic programming language, where the “pragmatic, programmer’s model or semantics” has to be kept fairly simple. It is all too easy to get into the weeds and make the type/module system complex beyond (average) programmer’s comprehension. It should be possible to teach the entire language in an _introductory programming course_ based on the language. I have verified that this is certainly not the case for, e.g. Haskell (and I assume the same is true of C++). Dynamic languages (such as Python), avoid the issue by leaving their implicit type system out of
the design! Sometimes someone comes along later and tries to fix that, e.g. typescript.
Sometime, probably later this year, I plan to launch a “heavy” project to reimplement (and probably partly redesign) the SML type + module system in SML/NJ (or a branch thereof). Kibitzers welcome. Watch for it in github.com/smlnj <http://github.com/smlnj> and standardml.zulipchat.com <http://standardml.zulipchat.com/>.
I will take into account these Successor-ML discussions.
Dave
On Feb 16, 2024, at 4:07 AM, Andreas Rossberg ***@***.***> wrote:
Since signatures can be used in both co- and contra-variant position, allowing subtyping on signature equations would be unsound.
The closest you could do is bounded abstract signatures:
struct
signature I = sig type t end
structure T = struct type t = in end
end :>
sig
signature I < sig end
structure T : I
end
But when using this in functor parameters, that would give rise to something at least as expressive as bounded quantification as in F-omega-sub with full forall-subtyping, which we also know is undecidable.
—
Reply to this email directly, view it on GitHub <#39 (comment)>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/AAGXNPMOJD6T35YRSFCMF4LYT5DW5AVCNFSM4H7MP662U5DIOJSWCZC7NNSXTN2JONZXKZKDN5WW2ZLOOQ5TCOJUHAZDOMJUGMZA>.
You are receiving this because you are subscribed to this thread.
David MacQueen
***@***.***
|
It should be possible to nest signature declarations inside structures and specifications inside signatures. The OCaml Map module is just one example where this is quite natural compared to the toplevel pollution in the SML/NJ library with
ORD_KEY
andORD_MAP
.Abstract signatures make module type checking undecidable, so those should not be added.
The text was updated successfully, but these errors were encountered: