Dear Guile hackers, What nice work you are doing! For those who don't know me, I'm a Guile developer who has been doing other stuff for some time. When trying to use guile 2 for logic programming I discovered that the slib interface is again broken (and has been for quite some time). This easily happens because it is a very fragile interface. The way this is supposed to be used (and as documented in the manual), one does a (use-modules (ice-9 slib)) and can then do (require 'modular) etc. The module (ice-9 slib) forms a kind of sandbox so that all new definitions that are imported through "require" are loaded as local bindings in the (ice-9 slib) module and are exported through the public interface of (ice-9 slib). The implementation of the interface has two sides. One, the file ice-9/slib.scm, is owned by Guile. The other, slib/guile.init, is owned by slib. slib has such .init files for some common scheme implementations but I early on noticed that that the guile.init file is not really maintained. I decided that it would be more robust if slib.scm incorporated most of the interface so that it would be easy to update it as Guile changed. But of course slib also changed and at some point others felt that guile.init should contain most of the interface and the bulk of slib.scm was moved there. As we have seen, this didn't make things much better. I'll let you ponder on how to handle the fundamental problems with this interface, but, as a Guile user, I think it would be nice if the interface works as written in the manual. Attached to this email you'll find two patches. The patch to slib.scm copies a snippet of code from guile.init so that they agree with eachother and with the Guile reference manual on how to find slib in the filesystem. This patch for example makes SCHEME_LIBRARY_PATH work as described. I've tried to write the patch to guile.init so that it can play well with older Guile versions, but we should test this. In order to make it work with Guile 2, though, I had to introduce a new syntax binding syntax-toplevel?. Given a syntax object (as available within a syntax-case transformer), it decides if the object originates from top level context. It is used, as in the old memoizing macro transformer, to choose whether to define-public or just define. *But*, the proper implementation of syntax-toplevel? requires modification of psyntax.scm and adding it to the (system syntax) module. I didn't want to do this until I've had your comments, so the present patch has its own syntax-object accessors (which breaks abstraction and is therefore not a real solution). I should also say that I have not yet fixed the slib interface to the new Guile uniform arrays, so there's a lot of slib functionality which won't yet work. Comments? Can I add syntax-toplevel? to psyntax.scm and (system syntax)? Do you think it is reasonable to submit something along the line of guile.init.diff to slib guile.init? Best regards, Mikael Djurfeldt