I'm not sure if there's already a direct way to do this or not, but I didn't find it.
Right now, if I understood correctly, doing (ql:quickload "foo") will always prefer to load the non-quicklisp version if ASDF can find one. This is usually the right thing to do.
But once in a while, one might really want quicklisp to load the quicklisp version of the system, first downloading it if necessary, acting as if there wasn't already another (local, non-quicklisp) version ASDF can find.
So maybe there should be a way to do (ql:quickload "foo" :non-quicklisp-versions :ignore) or (ql:quickload "foo" :ignore-non-quicklisp t) or (ql:quickload "foo" :force-quicklisp-version t) or something like that.
(ql:quickload "foo" :non-quicklisp-versions :ignore)
(ql:quickload "foo" :ignore-non-quicklisp t)
(ql:quickload "foo" :force-quicklisp-version t)
Here's the situation that prompted me to request this feature:
I use my CLHS wrapper (http://www.hexstreamsoft.com/libraries/clhs/) to access CLHS pages locally, for instance CLHS DEFCLASS is at file:///home/hexstream/quicklisp/HyperSpec/Body/m_defcla.htm
In this URL, HyperSpec is a symlink (created by the CLHS wrapper) to the copy of the CLHS bundled with the CLHS wrapper (dists/quicklisp/software/clhs-0.6.1/HyperSpec-7-0/HyperSpec/ for instance).
The problem was that I had a local (development) version of the CLHS wrapper on my ASDF path*, so quicklisp wouldn't download its own version. The symlink was thus essentially pointing nowhere. I had to temporarily move my development version of the CLHS wrapper where ASDF wouldn't find it to force quicklisp to install its own version.
That was somewhat inconvenient and I figure there must be other cases where someone would want to force (down)loading of the quicklisp version of something even though ASDF can find a non-quicklisp version.
I guess a new feature like (ql:ensure-installed "foo") would also work for my use-case.
Using (ql:use-only-quicklisp-systems) is certainly much better than temporarily moving directories out of the way like I did. It works well.
The only potential problem I see with it is that there doesn't seem to be an easy way to revert its behavior. After doing the install again to test this better way, I restarted the image to go back to the normal behavior. That wasn't a problem since my image didn't have any state I cared about, but in the general case it might be a bit more bothersome than necessary.
I think the ideal, complete solution would be to have a ql:using-only-quicklisp-systems macro that would temporarily enact the effect of (ql:use-only-quicklisp-systems), execute its body and then revert to the previous behavior.
If this feature existed, the following simple code would do exactly what I wanted:
This would be a nice addition that (it seems to me) would cover many use cases and wouldn't require updating the signatures of any existing functions.