Hierarchy layout

Malcolm Wallace malcolm@abbess.demon.co.uk
Thu, 22 Mar 2001 10:18:52 +0000


Modulo some discussion about the role of Lang, I think we have
come to a reasonable agreement about the general rules for
constructing a library hierarchy layout.

To help further discussions, I've pulled together lots of
the ideas expressed about individual modules, their names,
and their locations.  Here is a complete revised hierarchy
tree proposal.  It is largely based on Simon's proposal,
modified in the light of all the comments on the list, with
a few extra tweaks of my own.

I have tried to spell names out in full rather than use
abbreviations, but in some cases, it was clearer to rename
a module altogether than to expand an abbreviation.

Regards,
    Malcolm

------------
Prelude                 -- Haskell98 Prelude
    ShowFunctions       -- small 'obvious' additions to the Prelude

Data
    Bits
    Char                -- H98
    Complex             -- H98
    Either              -- H98
    Int
    Maybe               -- H98
    List                -- H98
    PackedString
    Ratio               -- H98
    Word
    IORef
    STRef
    Binary              -- Haskell binary I/O
    Digest
        MD5
        ...             -- others (CRC ?)

Structures              -- top-level?  or should it be Data.Structures?
    Array               -- Haskell 98 Array library
        Overloaded      -- (opt) IArray - GHC's overloaded arr libs
        Mutable         -- (opt) MArray
        IO              -- mutable arrays in the IO/ST monads
        ST
    Trees
        AVL
        RedBlack
        BTree
    Queue
        Bankers
        FIFO
    Collection
    Graphs
    FiniteMap
    Set
    Memo                -- (opt)
    Unique
    Monad               -- Haskell 98 Monad library
        ST              -- ST defaults to Strict variant?
            Strict      -- renaming for ST
            Lazy        -- renaming for LazyST
        Either          -- monad libraries
        State
            etc.

Algebra
    DomainConstructor   -- formerly DoCon
    Geometric           -- formerly BasGeomAlg

Database
    MySQL
    PostgreSQL
    ODBC

Debug
    Trace
    Quickcheck
    Observe             -- choose a default amongst the variants
        Textual                 -- Andy Gill's release 1
        ToXmlFile               -- Andy Gill's XML browser variant
        GHood                   -- Claus Reinke's animated variant

Edison                  -- (opt, uses multi-param type classes)
    Prelude             -- large self-contained packages should have
    Collection          -- their own hierarchy?  Like a vendor branch.
    Queue               -- Or should the whole Edison tree be placed
    ...                 -- under [Data.]Structures?

FileFormat              -- 'Codec' might be a more accurate name?
    Compression
       Gzip
       Bzip2
    Graphics
       Jpeg
       Ppm
       Png
    Audio
       Wav
       Mp3
    Video
       Mpeg
       QuickTime
       Avi

Foreign
    Ptr
    StablePtr
    ForeignPtr  -- rename to FinalisedPtr?  to void confusion with
Foreign.Ptr
    Storable
    Marshal
        Alloc
        Array
        Errors
        Utils
    C
        Types
        Errors
        Strings

Graphics
    UI
        Gtk
        FranTk
        Fudgets
        CleanIO
    Drawing
         HOpenGL
    Format              -- use FileFormat.Graphics instead

Language
    Haskell             -- hslibs/hssource
        Syntax
            Abstract
            Core
        Lexer
        Parser
        Pretty
    Python?
    C?

Numeric
    DSP
        FastFourierTransform
        Noise
        Oscillator

Network                 -- won't need to be optional (will use FFI only)
    Socket              -- redesign (merge w/ SocketPrim)
    BSD                 -- remove??
    URL
    CGI                 -- one in hslibs is ok?

System
    IO                  -- H98 + IOExts - IOArray - IORef
        Directory
        Select
    Console
        GetOpt
        Readline
    Posix               -- redesigned, use FFI only
        IO              -- there was a suggestion to split Posix into
        Process         --   separate chunks like IO + Process
    Win32               -- the full win32 operating system API
    Mem                 -- rename from cryptic 'GC'
        WeakPointer     -- (opt)
        StableName      -- (opt)
    Time                -- H98 + extensions
    Locale              -- H98
    CPUTime             -- H98
    -- split H98 "System" (too generic) into:
    Exit
    Environment (getArgs, getProgName, getEnv ...)
    Control
        Exception       -- (opt)
        Concurrent              -- as hslibs/concurrent
            CVar                -- Most of these type names are cryptic
            Chan
            MVar
            Merge
            QSem
            QSemN
            SampleVar
            Semaphore
        Parallel                -- as hslibs/concurrent/Parallel
            Strategies

Text
    Regex                       -- previously RegexString
    PrettyPrinter               -- default (HughesPJ?)
        HughesPJ
        Wadler
        ...
    Html                        -- HTML combinator lib
    Xml
        Combinators
        Parse
        Pretty
        Types
    ParserCombinators                   -- no default
        Parsec
        Hutton_Meijer
        ...

Type
    Generics            -- (opt)
    Dynamic             -- (opt)

GHC
    Primitives
    UnboxedTypes
    ...
Nhc
    Stuff

------------