Heirarchical name space allocation

Simon Marlow simonmar at microsoft.com
Tue Apr 13 11:56:03 EDT 2004


 
> That's no contradiction to my rule, e.g. 
> Graphics.Rendering.OpenGL is about
> *all* OpenGL stuff, while Graphics.Rendering.OpenGL.GL is about GL and
> Graphics.Rendering.OpenGL.GLU is about GLU.
> 
> Perhaps I should explain a little bit more what IMHO is a 
> "good use" of the
> hierarchical structure:
> 
>   * "collector" modules: These are a necessity for larger 
> APIs, otherwise you
>     can easily have dozens of closely related imports. Nobody 
> argued against
>     this use, IIRC, and we already have a lot of examples of it.
> 
>   * "selector" modules: There are different implementations 
> Foo.A and Foo.B of
>     basically the same API, but it's not clear (yet) which 
> one is better. So
>     Foo simply re-exports one of Foo.A and Foo.B as the 
> default for people who
>     don't care, but there is still the possibility of using a 
> specific one.
>     Text.PrettyPrint is an example of this use, although 
> there's currently only
>     one specific implementation. Another example is 
> Data.STRef, Data.STRef.Lazy,
>     and Data.STRef.Strict, but the imports are a bit 
> "upside-down" here, something
>     we should probably change.
> 
>   * A collection of only loosely related modules Foo.A, 
> Foo.B, ...: Having a
>     module Foo wouldn't make much sense in this case. A good 
> example for this
>     is the Data hierarchy.

There is a rough policy, which pretty much repeats what Sven says above,
here:

http://www.haskell.org/hierarchical-modules/libraries/layout.html

This is part of the document in fptools/libraries/doc/libraries.sgml,
BTW.  Some bits of it are out of date.  Perhaps I should separate out
the design guidelines into a separate document.

Cheers,
	Simon


More information about the Libraries mailing list