The base library and GHC 6.10

Claus Reinke claus.reinke at talk21.com
Sun Aug 31 18:02:59 EDT 2008


Leaving Data.Generics.Basics in base while moving
Data.Generics.Instances to syb raises the interesting issue of
dealing with the accidental re-exports of Data.Generics.Instances
from various places. Here is that list again (*):

    $ find . -name '*hs' | grep -v _darcs | xargs grep -l 'Data.Generics' | grep -v Generics
    ./array/Data/Array.hs
    ./base/Data/Typeable.hs
    ./bytestring/Data/ByteString/Internal.hs
    ./bytestring/Data/ByteString/Lazy/Internal.hs
    ./bytestring/Data/ByteString/Unsafe.hs
    ./containers/Data/IntMap.hs
    ./containers/Data/IntSet.hs
    ./containers/Data/Map.hs
    ./containers/Data/Sequence.hs
    ./containers/Data/Set.hs
    ./containers/Data/Tree.hs
    ./haskell-src/Language/Haskell/Syntax.hs
    ./network/Network/URI.hs
    ./packedstring/Data/PackedString.hs
    ./template-haskell/Language/Haskell/TH/Quote.hs
    ./template-haskell/Language/Haskell/TH/Syntax.hs

And here is a brief scan of what each of these is doing. References
to 'standard' vs 'dubious' Data instances are wrt the suggested split
in [1], with some possible refinements:

- array: the Data instance for Array could be moved into array,
    avoiding the need for instance imports and syb dependency?

- bytestring: uses deriving, which for Internal.hs depends on
    Data instances for Int [standard] and (ForeignPtr Word8)
    [dubious]; would need to depend on syb; and import both
    standard and dubious instances :-(

    perhaps Data instances for type constructors with phantom
    types should be re-classified into Standard, given that there
    are no data objects to be traversed?

- containers: IntMap.hs, IntSet.hs, Map.hs, Sequencs.hs, Set.hs,
    Tree.hs define their own Data instances, or derive them in such
    a way that they do not need to import any instances :-)

- haskell-src: uses deriving, will need to depend on syb; depends
    almost exclusively on standard instances (the only exception I
    can see in a quick scan is Rational);

    perhaps this is an argument in favour of moving the Data instance
    for 'Ratio a' from Dubious to Standard: the parameter type is
    never meant to be traversed, and tainting every client of 'Ratio a'
    with the really bad instances is not a good idea. Opinions?

- network: uses deriving, will need to depend on syb; depends
    only on standard instances

- packedstring: defines its own instances, no need to import any

- template-haskell: uses deriving, roughly the same situation as
    for haskell-src?

Claus

[1] see the last page of
    http://www.haskell.org/pipermail/libraries/2008-July/010313.html
[2] http://www.cs.kent.ac.uk/~cr3/toolbox/haskell/#syb-utils






More information about the Libraries mailing list