2012/12/27 Thien-Thi Nguyen <t...@gnuvola.org>: > () Panicz Maciej Godek <godek.mac...@gmail.com> > () Thu, 27 Dec 2012 04:43:16 +0100 > > I think it can sometimes be desirable to import the whole public > interface except certain bindings. > > Could you give a non-contrived example? I can't think of any, myself. > I remember toying w/ the idea when adding ‘#:renamer’, w/ same doubts.
I recently had two similar cases, related with similar problem -- namely, with goops' generics. I wanted to use some features (I guess those were bytevector features) from (rnrs) module, but I also imported `write` and `display` procedures, which overrode the `write` and `display` generics from goops. I knew that I wasn't using write nor display from (rnrs) (because I didn't even realize their existence), but I didn't remember which features exactly did I use. Yesterday I had a similar case, because I was trying to make generics from slot-ref and slot-set! so that I could be able to extend their functionality, because I'm trying to extend the goops system to better suit my needs -- so I'd wish, for instance, to be able to record easily, which slots of an object have been modified -- and while I was trying to manage it using macros (and introducing a `define*-class` form with extended syntax), it occurred to me that using generics would be much simpler. > [...] and require me to change my header as the module changes. > > Note that maintaining a blacklist and maintaining a whitelist is still > maintenance. Better to ‘#:select’ exactly what you need and no more, > i.e., take a purely constructive stance. That's maintenance, too, but > the eye work is locally concentrated, which builds Quality, rather than > broadly dispersed, which destroys (or, at best, delays) trust. (IMHO.) I have to say that I completely don't understand this point. I'd never think, that 'precision' is the word that would apply to a module system. For me, the module system should be convenient, rather than 'concentrated'. It's like if -- in a conversation -- you'd need to specify which words you are going to use in which meaning beforehand, before you even say anything meaningful. Such symbols, as +, -, /, *, are available in scheme, even if you're not using any arithmetics in your program. Is it this 'broad dispersion' that you mentioned? I always get frustrated that I have to (use-modules (ice-9 match) (srfi srfi-2)), because I use the 'match' and 'and-let*' syntaxes as a part of the common logic of the language. OK, maybe arithmetics is an exception. But it's really a surprise that such procedures as inet-aton or select are available in the core guile, because I'd rather expect to (use-modules (unix socket)) or something like that, before using them. But I'm used to thinking of modules as if they were (more or less consistent) domains, so I would find it extremely irritating if I had to say explicitly, which notions from that domain I want to use. Thanks for your reply :)