**lltp:** _Well, then it is useless. I am from a domain (science) where similar 
concepts are generally called a similar way and where clashes occur a lot 
because something as simple as * has a gazillion meanings depending on the 
context (and all of them applied to arrays of any dimensions, so no useful 
dispatch there)._

As somebody who works in the same domain, may I suggest that qualifying 
everything may not be the way to go here?

A better solution would be ML-style module management, especially local 
imports. This allows you to write things like: `Vect3D.(x + y + z)`, where the 
imports from the module `Vect3D` are only visible within the expression in 
parentheses. It would be a bit trickier to do in Nim (because Nim does 
overloading rather than shadowing), but those issues can be solved.

**Araq:** _I will do so if you ask again, but as peace-offering how about this 
proposal:_
    
    
    from Module import type Foo
    

While I'm not opposed to that idea, something I'd rather see (or in addition) 
is an option to declare and import parts of a module.

We have to look at the actual problem we'd like to solve. Normally, a 
well-designed module should not be a kitchen sink and just contain a type (or 
set of tightly related types) and its operations. A `from M import type T` 
statement would then simply be the same as `import M`. Problems arise if either 
(1) we end up with a kitchen sink module despite our best efforts, (2) two more 
modules are so interdependent that they cannot be separated into several module 
files, or (3) parts of the module (such as support for testing or for a DSL) 
are only needed sometimes, but not all the time.

In short, regardless of whether it would be valuable to support selective 
imports on the client side, specifying selective imports on the supplier side 
is at least equally (if not more) interesting.

Reply via email to