Library Infrastructure Proposal & Home Page

Isaac Jones ijones at
Wed Sep 24 18:18:37 EDT 2003

Followups to libraries at please.


After many rounds of email and discussion, some wiki work, and
discussion at the HIM, I've finally put together a proposal for the
Library Infrastructure Project.  I've inserted the introduction
below. The draft proposal itself is available in a variety of

I've also started a web page for the project under the

Please let me know if there's anything that needs to be added, if
anything is confusing, etc.  Comments and questions are welcome by
email or on the libraries at mailing list.




I expect to be moving a lot of stuff off of the wiki page since it is
duplicated here.


Library Infrastructure Project Proposal

   The Library Infrastructure Project is an effort to provide a
   framework for developers to more effectively contribute their
   software to the Haskell community.

   The Haskell Implementations[1] come included with a good set
   of standard libraries, but this set is constantly growing and
   is maintained centrally. This model does not scale up well,
   and as Haskell grows in acceptance, the quality and quantity
   of available libraries is becoming a major issue. There are a
   wide variety of Haskell Implementations (both compilers and
   interpreters), each of which target a variety of hardware
   architectures and operating systems. There are also a number
   of different groups and individuals providing libraries, and
   these libraries depend upon each other and they depend upon
   external systems such as Java or GTK.

   It can be very difficult for an end user to manage these
   dependencies and build all the necessary software at the
   correct version numbers on their platform: there is currently
   no generic build system to abstract away differences between
   Haskell Implementations and operating systems [2].

   The Library Infrastructure Project seeks to provide some
   relief to this situation by building tools to assist
   developers, end users, and operating system distributers.

   This is a draft proposal. If you have comments, please email
   Isaac Jones. The latest version of this document should be
   available in a variety of formats from the Library
   Infrastructure Project home page.

   Table of Contents
   1. High-Level Overview
   2. Issues Facing Developers

        2.1. Issues Facing Packagers
        2.2. Why We Should Solve This

   3. A Solution for Haskell in Haskell

        3.1. The Module Design
        3.2. But Why Should We Use Haskell?
        3.3. Setup.lhs Command-Line Interface
        3.4. An Example Setup.lhs Script

   4. Distribution Module

        4.1. Distribution.Build
        4.2. Distribution.Install
        4.3. Distribution.Package

              4.3.1. PackageConfig Data Structure

        4.4. haskell-config Command-line interface
        4.5. haskell-pkg?
        4.6. Distribution.Config

   5. Use Cases
   6. Means of Distribution and Layered Tools
   7. Development Plan
   A. Related Systems

        A.1. Debian
        A.2. Python Distutils
        A.3. CPAN and Boost
        A.4. FreeBSD's Ports System
        A.5. The XEmacs Packaging System
        A.6. Make-Based Systems
        A.7. hmake

1. High-Level Overview

   On a high level, we say that we want the system to help the
   user to install packages (whether they be libraries or
   applications) and their dependencies. To accomplish this, we
   propose a system similar to Python's Distutils (Section A.2)
   where each Haskell tool is distributed with a script (Section
   3.4) which has a standard command-line interface. This script
   will provide a familiar user interface (Section 3.3) for
   compiling, installing, and removing packages and their

   For instance, to install the HUnit package, the user might
   download the source code from the web site, change into the
   HUnit directory, and type ./Setup.lhs install default, which
   would build and install the HUnit package for the default
   compiler. Similarly, he might type ./Setup.lhs install nhc to
   install the package for NHC.

   Other tasks might be necessary to make the package known to
   the system, such as registering it with the Haskell
   Implementation of interest (Section 4.3). Such tasks would
   also be performed by this Setup program.


More information about the Libraries mailing list