I opened a radar a while ago about improving the import syntax in Swift and 
haven’t received much of a response, so I’ll try to expand on my thoughts in 
there here.

I’ve always been in love with the way Agda does Modules and imports.  The 
syntax is wonderfully natural, and the features it provides are surprisingly 
useful given their simplicity.  Because Swift forbids the redeclaration of 
names between structs, enums, classes, and typealiases, I don’t believe that 
the existing qualified import syntax is needed.  Therefore, I propose the 
introduction of 3 agda-esque operations for imports to replace the usual 
`import {func|typealias|struct|class|enum|etc.}` syntax:

        • import Foo using (bar, Baz, qux, corge, …)
        • import Foo hiding (bar, baz, qux, corge, …)
        • import Foo renaming (grault to garply, waldo to fred, …)

The first of these is used to introduce a limited set of identifiers into 
scope, the second to import all but the given identifiers, and the third to 
rename identifiers at the module level.  Again, it should be obvious by 
uniqueness of identifiers what each one is referencing, so qualification of 
each identifier is unnecessary.  If more context is needed, or more 
granularity, a Haskell-esque 

import Foo {using|hiding|renaming} (Baz(..) [to Graft(..)])

could be in order for structs, classes, and enums, but I don’t anticipate it 
will be of much use because individual members are already qualified by their 
containing structure or instance variable anyway. 

What do you think?

~Robert Widmann
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to