
Claus Reinke wrote:
-- A module Main where import Data.Time main = print =<< getCurrentTime
-- B module Main where import Data main = print =<< Time.getCurrentTime
that last line should be
main = print =<< getCurrentTime
i probably thought for a moment that i was exporting a module, rather than its contents. was that the source of confusion?
actually I was confused because you had import Data(module Time) and that isn't Haskell. But never mind, I think I now get the gist of what you're asking about... see below.
so why did the experiment reported in
http://www.haskell.org/pipermail/libraries/2007-September/008062.html
work, when Y.hs imports Data.Time, but the package P only exposes Data? is Y importing time's Data.Time directly, even though P doesn't expose it?
Interesting. To recap, you had -- Y.hs module Main where import Data.Time main = print =<< getCurrentTime and you compiled it like this; $ ghc -package P Y.hs without failure. Package P simply depends on package time, that's all. You have to understand that the above command does two things: it compiles Y.hs to Y.o, and then it links Y.o with libraries to form a binary. In the first stage, all exposed packages are available (because you didn't say -hide-all-packages), so Data.Time from package time is in scope and you can successfully import it. At link time, all you have to do is make sure the required packages are linked in, and you did that by explicitly linking something (P) that depends on package time, so package time was linked in too. I don't think there's anything really "wrong" here, that's just the way it works when you don't use --make. Cheers, Simon