Require: Specifying package abbreviations
_Require: Specifying package abbreviations_
=================================================
By Ryan Culpepper (ryanc at ccs dot neu dot edu)
Keywords: _require_, _module_, _package_, _library_
API
===
To use: (require (planet "require.ss" ("ryanc" "require.plt" 1)))
> (define-module <name> <mod-spec>) SYNTAX
Defines 'require-<name>' as a macro that expands into a require form
for the given module spec.
(define-module list (lib "list.ss"))
(require-list)
==Expands==> (require (lib "list.ss"))
Also defines 'require-for-syntax-<name>' and 'require-for-template-<name>'
> (define-library <name> <package-spec>) SYNTAX
Defines 'require-<name>' as a macro that expands into a require form
for the given module spec, but taking the module (file) name and
optional additional subdirectories at the point of usage.
(define-library schemeunit (planet ("schematics" "schemeunit.plt" 1 2)))
(require-schemeunit "test.ss")
==Expands==> (require (planet "test.ss" ("schematics" "schemeunit.plt" 1 2)))
(define-library dr (lib "drscheme"))
(require-dr "debug.ss" "private")
==Expands==> (require (lib "debug.ss" "drscheme" "private"))
(define-library dr-priv (lib "drscheme" "private"))
(require-dr-priv "debug.ss")
==Expands==> (require (lib "debug.ss" "drscheme" "private"))
(define-library project (file "/home/schemer/project"))
(require-project "app.ss")
==Expands==> (require (file "/home/schemer/project/app.ss"))
PRAGMATICS
==========
Projects that depend on external packages and collects may benefit from defining
shortcuts to those external resources in a single local module. This reduces the
number of changes necessary when upgrading to a new version of a PLaneT package;
the progammer must change the version numbers in one module rather than in every
module that uses that facility.
Expected usage:
/project
/config.ss
/myfile1.ss
/myfile2.ss
...
(module config mzscheme
(require (planet "require.ss" ("ryanc" "require.plt" 1)))
(define-module foo (planet "foo.ss" ("alice" "foo.plt" 3 2)))
(define-library bar (planet ("bob" "bar.plt" 1 1)))))
;; require-foo, require-bar, etc are automatically exported
(module myfile mzscheme
(require "config.ss")
(require-foo)
...)
(module myfile2 mzscheme
(require "config.ss")
(require-bar "mumble.ss")
...)
Then, when new versions of the 'bar.plt' package are available, the projects can
switch to those by changing only the contents of the "config.ss" file, rather than
tracking down every occurrence of a require to 'bar.plt' in the projects.
BUGS AND TODO
=============
- Add dynamic-require support