You are hitting this problem because the "base" and "haskell98" packages really do provide overlapping functionality. The Haskell 98 standard specifies a few core modules and gives them very simple names, like "Maybe" and "Time". Modules with these names are provided by haskell98 [1]. By default, GHC provides the base package instead, which uses hierarchical names, like "Data.Maybe" and "System.Time". But both packages provide a module named "Prelude".
I think that in practice, this kind of conflict is quite rare.
The quick fix for your situation is probably to add the flag "-hide-package base" to your command-line [2]. You could also write a cabal file for this program - when building with cabal, all packages are hidden by default unless explicitly listed.
-Karl