Packages in GHC 6.6

Peter Tanski p.tanski at gmail.com
Wed Aug 23 02:00:00 EDT 2006


Simon,

>>    ... At the moment,
>>    the only packages you can add in this way are:
>>
>>      ALUT, HGL, HUnit, OpenAL, OpenGL, QuickCheck, X11, cgi,
>>      fgl, haskell-src, html, mtl, network, parsec, time, xhtml
>
>  ... instead include smaller and more "fundamental"
> packages: ByteString, regexps, Collections, Edisson, Filepath, Time,
> networking, web.

I agree with your original idea and Bulat's: the libraries packaged  
with a compiler should, as a general rule, be those that support the  
core features of the language or usage of the language itself.  Not  
far off from that are things like being able to work with the  
operating system--these are essentially related to I/O--because  
without them your machinations would only be able to operate on  
themselves.  Without getting philosophical about what is and is not  
necessary for a language to "speak," I'm just looking at the general  
big-libraries packaged with mature languages like Ada and C++.  So  
here is my vote:

Top priority: those you already mentioned, with Bulat's vote for  
Edison, ByteString, Filepath and Time; I vote for fgl (in my  
experience fgl is as useful in its own way as Data.Map), mtl, and  
haskell-src.  So the core list might be:

*base, haskell98, template-haskell, stm, mtl, haskell-src,
*ByteString, Edison, fgl --only because for Edison and fgl there are  
no reasonable alternatives, so these are in a sense "standard"
*readline, unix, Win32, Filepath and Time (they really complement  
unix and Win32)

*Cabal--though this is an extraordinary convenience, it is not  
strictly necessary (Haskell-GHC users could always be forced to  
Include everything outside of a standard system directory.  I don't  
mean a GHC-system directory--there are far too many language-specific  
directory structures crawling around, it's like trying to hide from  
Wal-Mart.)

... well, that's how I had started the email, but I think your  
original idea is right: stick with only what you absolutely need and  
with what is part of the Haskell "standard" library:


*base, haskell98, template-haskell, stm, mtl, haskell-src and Cabal  
are fine; the rest can go together in a special "distribution."


Why add mtl and haskell-src?  Those seem to be situations where you  
would have to install a specific library (mtl, say) and specially  
integrate it into your build of another.  At some point the  
dependencies merit the adoption of a "standard."

Extra-Haskell parsing is a good example of leaving things out.   
HaXml's parser (HuttonMeijerWallace, PolyLazy) is roughly  
interchangeable with Parsec in many ways--though reasonable people  
may differ on which is actually better--and installing or  
uninstalling either would be easy.

Things that are missing... There are some library systems that really  
should come standard and therefore need development.  The most  
specific I can think of are deep-core Haskell debugging libraries  
(would you think of grabbing gcc without gdb?)--a GHC "HAT."  Things  
that allow specialised code such as haskell-src-exts's dynamic  
loading modules would also be good--this is like having dynamic  
libraries for Haskell.

Sorry for the length; I've been literally bugged-out with getting a  
commercially and GPL-usable comparable replacement for GMP going...   
Personally I would love to give GHC a built-in interface to a real  
high-level math library (vectors, arbitrary-precision Reals?) but  
that would be as bad as forcing all gcc users to uninstall a  
hypothetical gcc-BLAS before they could install their own system- 
tuned or more precise library.  I have been realising more and more  
that Integers are not a math-library but a data-type (hence bitwise  
operations).

-Pete




More information about the Glasgow-haskell-users mailing list