Haskell library infrastructure coordinator
Peter Simons
simons@cryp.to
28 May 2003 13:30:55 +0200
I wanted to write up a proposal regarding the organization of a
»central« library infrastructure for weeks ... So I guess now is the
time to do or die.
Shae Matijs Erisson owns the »haskell-libs« project at
sourceforge.net, and we figured this would be a good platform for the
effort. The idea is to set-up a CVS repository, which contains the
following directories:
- hslibs
Here do the actual source codes live, using a directory layout
complying to the hierarchical library structure, for example:
- Text
- Data
- Foobar
The contents is by-approval-only: Any library accepted into this
part of the repository has to undergo a review process, in order to
ensure high quality and somewhat stable interfaces. A set of
guidelines for this process would have to be created, but we could
probably adapt the _excellent_ www.boost.org process with little
effort.
These libraries serve as a quasi-extension of the libraries shipped
with ghc/hugs/nhc98. Ideally, everybody would be able to use them
by just checking out this directory and adding it to the compiler's
search path.
- Unstable
This directory will contain a bunch of per-user-directories, for
example:
- SimonsPeter
- ErissonShaeMatijs
- AgentSmith
This directory serves as a private (but unique) namespace for
_everybody_ to publish work-in-progress, or libraries that are too
specific to be accepted into the general »hslibs« area. Everybody,
who checks out »Unstable« and adds it to the compiler's search
path, can access them like this:
import Unstable.SimonsPeter.MyPrivateLib
import Unstable.Whoever.Whatever
Libraries from »hslibs« must not relay on libraries provided in the
»Unstable« space, but user-space libraries may relay on »hslibs«.
It's also a good idea to publish candidate libraries for inclusion
in the »official« space here. But basically this space can contain
_anything_ you feel others might be interested in.
- tools
This directory will contain several small tools useful for user's
of the distribution. So far I am working on two things to go here:
- cvssynch
This is a small Haskell program to synchronize two CVS
repositories. The idea is that you maintain your private
sources in a CVS repository on your private machine. When
you're ready to release it, all you do is call »cvssynch« and
it will import the code into the »vendor branch« of the CVS
repository at sourceforge.net. Unlike »cvs import«, though,
»cvssynch« will handle added and erased files/directories
automatically.
Since the files are imported into the vendor branch, you can
still make sourceforge.net-specific changes to the files using
CVS's merging feature. If done right, this allows to maintain
a private copy of the sources simultaneously to the public
version with very little overhead. (A make target could take
care of all this.)
- hbuild
hbuild is a monadic combinatory library, which implements a
»make« utility in Haskell. Unlike normal makes, though, hbuild
is an ordinary haskell program! You can build your sources by
executing »runhugs HBuild all« or »runhugs HBuild install«.
This is still highly experimental, but -- not surprisingly --
the package blows any make-variant I've seen out of the water
in terms of flexibility and power. I'm still struggling with
the design when it comes to building variants (say, you want
to build a library for GHC and NHC98 simultaneously), but I
hope to get a beta version ready within a few weeks at most.
What this approach would achieve:
* Users could access the libraries contained in here with no effort
at all.
* Users can chose whether they want only the tested and stable
libraries, or whether they're up for some experimental stuff.
* The experimental code is guaranteed to have a unique module name
thanks to the »Unstable.UserID« path.
* SourceForge.net provides us with all kinds of nifty features, like
web space, bug tracking, feature request tracking, etc.
* The »hslibs« space could evolve into a portable base library for
Haskell, which can be re-used by _all_ compiler vendors, rather
than each of them providing their own versions of standard modules.
I would like to help getting this set-up, if there is any interest. In
particular, I could help working on the guidelines, etc., since I have
some experience with the Boost project, which does almost exactly the
same thing for the C++ community.
Any thoughts?
Peter