[Haskell-cafe] Re: [Haskell] Re: Trying to install binary-0.4

Claus Reinke claus.reinke at talk21.com
Tue Oct 16 07:22:42 EDT 2007


>> - if you provide a 'base' configuration that pulls in the stuff that
>>   used to be in base, the package will work
> 
> I don't know of a way to do that.  The name of the package is baked into 
> the object files at compile time, so you can't use the same compiled module 
> in more than one package.

i've been wrong about this before, so check before you believe,-) 
but here is a hack i arrived at the last time we discussed this:

[using time:Data.Time as a small example; ghc-6.6.1]

1. create, build, and install a package QTime, with default Setup.hs

    -- QTime.cabal
    Name: QTime
    Version: 0.1
    Build-depends: base, time
    Exposed-modules: QTime.Data.Time

    -- QTime/Data/Time.hs
    module QTime.Data.Time(module Data.Time) where
    import Data.Time

2. create, build, and install a package Time2, with default Setup.hs

    -- Time2.cabal
    Name: Time2
    Version: 0.1
    Build-depends: base, QTime
    Exposed-modules: Data.Time

    -- Data/Time.hs
    module Data.Time(module QTime.Data.Time) where
    import QTime.Data.Time

3. write and build a client module

    -- Main.hs
    import Data.Time
    main = print =<< getCurrentTime

    $ ghc -hide-all-packages -package base  Main.hs

    Main.hs:1:0:
        Failed to load interface for `Data.Time':
          it is a member of package Time2-0.1, which is hidden

    $ ghc -hide-all-packages -package base -package Time2 Main.hs

    $ ./main.exe
    2007-10-16 11:09:05.859375 UTC

    $ rm main.exe Main.hi Main.o
    
    $ ghc -hide-all-packages -package base -package time Main.hs
    
    $ ./main.exe
    2007-10-16 11:09:29.34375 UTC

as i said, i've misinterpreted such symptoms before, but it seems
to me that Time2's Data.Time acts as a drop-in replacement for
time's Data.Time here. doesn't it? 

it is rather tedious, having to do something for every module in 
the package, twice (once to get a package-qualified name that
differs from the original name, the second time to re-expose it
under its original name), but that could be automated. and there
would be an extra QBase package. but until cabal supports 
such renamings directly, it might be a workaround for the 
current base issue?

claus



More information about the Haskell-Cafe mailing list