curiosity, bug, or just dead code?

Stefan O'Rear stefanor at cox.net
Mon Sep 10 22:22:25 EDT 2007


On Tue, Sep 11, 2007 at 12:02:26AM +0100, Claus Reinke wrote:
> consider this module, which is accepted by ghci-6.6.1:
>
>    module T where
>    import qualified Prelude as T(length)
>    import Prelude(length)
>    length = 0
>
> there is no way to refer to either length, as both 'length' and 'T.length' 
> are ambiguous (ghci complains on uses of either name). but is it a bug?
>
> then again, everything is implicitly exported, and there are two possible 
> 'T.length'.. (hugs [20051031] complains about conflicting exports, on 
> loading T).
>
> now for the good part:
>
>    module Q where
>    import T
>    main = print T.length
>
> loads fine, and running main returns 0.
>
>    Ok, modules loaded: Q, T.
>    *Q> main
>    0
>
> so this must be a bug, right? or a matter of interpretation?
>
> not everything is exported implicitly: imported items, whether unqualified 
> or qualified and renamed to share the current module as qualifier are not 
> exported by default. and changing 
>    module T where
>
> to 
>    module T(module T) where
>
> leads to conflicting export errors on load in ghci.
>
> currently, i think ghci is right, and hugs is wrong (note that
> my hugs is rather old, though), but it wasn't what i expected.

This is a known bug in hugs; quoth the user's guide:

In Haskell 98, a missing export list means all names defined in the
current module. In Hugs, it is treated as "(module M)", where M is the
current module. This is almost the same, differing only when an imported
module is aliased as M.

Yes, this is a dark corner in H98.

Stefan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://www.haskell.org/pipermail/glasgow-haskell-bugs/attachments/20070910/1aefe7ac/attachment.bin


More information about the Glasgow-haskell-bugs mailing list