Proposed Haskell module namespace layout


This is a proposed standardised layout for Haskell libraries, using the newly-proposed idea of module namespaces. It is intended firstly to give a flavour of how namespaces can help in organising library modules. I hope it is a reasonably convincing demonstration that namespaces are a Good Thing.

Its second purpose is to prompt discussion of how we, the Haskell community, would like to organise and develop our libraries towards the goal of a "Standard" set, available on all compiler and interpreter platforms. The particular layout shown here is a discussion-starter, not a final state. (There are whole areas that I know very little about, such as Algebraic and Numeric libraries, so there are bound to be gaps.) But together, we must work to create a consensus on naming issues like these.

The most important guiding principle, in my view, is: Death to Misc and Utils! Do not use a catch-all name for a category; only a little extra thought is required to devise an informative name. Your users will thank you!

    + Algebra + DoCon
    |         + Geometric
    |         + ...
    |
    + Data + Structures + Trees + AVL
    |      |            |       + RedBlack
    |      |            |       + BTree
    |      |            |
    |      |            + Queue + Bankers
    |      |            |       + FIFO
    |      |            |
    |      |            + Collection
    |      |            + FiniteMap
    |      |            + Graphs + ...
    |      |            + Edison + ....
    |      |
    |      + Encoding + Binary
    |                 + Bits
    |                 + Bzip2
    |                 + Gzip
    |                 + MD5
    |
    + Database + HaSQL
    |          + ODBC
    |
    + Debug + Observe
    |       + QuickCheck
    |       + Trace
    |
    + Graphics + UI + Gtk + Widget
    |          |    |     + Pane
    |          |    |     + Text
    |          |    | 
    |          |    + FranTk + ...
    |          |    + Fudgets + ...
    |          |    + CleanIO + ...
    |          |
    |          + Drawing + HOpenGL + ....
    |          |         + Vector
    |          |
    |          + Format + Jpeg
    |                   + PPM
    |                   + ...
    |
    + Haskell + Language + CoreSyntax
    |         |          + Parser
    |         |          + TypeSystem + ...
    |         |          
    |         + Plus + Concurrency
    |                + Exceptions
    |                + FFI
    |                + Unsafe + IO
    |                |        + Coerce
    |                |
    |                + FunDeps
    |
    + Interface + GetOpt
    |           + Readline
    |
    + Network + Socket
    |         + Web + CGI
    |               + URL
    |
    + Numeric + DSP + FFT
    |         |     + FIR
    |         |     + Noise
    |         |     + Oscillator
    |         |
    |         + Gaussian + ...
    |
    + Posix + ...
    |
    + Text + Html + ...
    |      + LexerCombinators + Chakravarty
    |      |                  + UU
    |      |
    |      + ParserCombinators + HuttonMeijer
    |      |                   + Parsec
    |      |                   + UU
    |      |
    |      + PrettyPrinter + Chitil
    |      |               + Hughes
    |      |               + HughesPJ
    |      |               + UU
    |      |
    |      + Xml + Combinators
    |            + Parse
    |            + PP
    |            + Types
    |
    + Win32 + ...
    |
    + Std + Algebra + ...
    |     + Data + ...
    |     + Database + ...
    |     + Debug + ...
    |     + Graphics + ...
    |     + Haskell + ...
    |     + Interface + ...
    |     + Network + ...
    |     + Numeric + ...
    |     + Text + ...
    .
    .
    .

Apologies for the ASCII formatting of this tree. I haven't been able to find a convenient way to draw it properly yet. Suggestions are welcome.

Malcolm.Wallace@cs.york.ac.uk