Hi,

rather than disambiguating a name from the current module by an abbreviated module name, I would prefer a disambiguation as is done for local names that shadows existing bindings. Then only imported names would need to be qualified (possibly using shorter module names).

So names of the current module would simple shadow unqualified imported names.

I think, that would only make previously ambiguous modules compile.

However, this does not help for the case when the whole module plus some imported names need to be exported.

  module AnnoyinglyLongModuleName
    ( module AnnoyinglyLongModuleName
    , ...
    ) where

(Without re-exports the whole export list could be omitted)

Cheers Christian

Am 29.09.2014 um 10:19 schrieb Herbert Valerio Riedel:
Hello *,

Here's a situation I've encountered recently, which mades me wish to be
able to define a local alias (in order to avoid CPP use). Consider the
following stupid module:


     module AnnoyinglyLongModuleName
        ( AnnoyinglyLongModuleName.length
        , AnnoyinglyLongModuleName.null
        ) where

     length :: a -> Int
     length _ = 0

     null :: a -> Bool
     null = (== 0) . AnnoyinglyLongModuleName.length


Now it'd be great if I could do the following instead:

     module AnnoyinglyLongModuleName (M.length, M.null) where

     import AnnoyinglyLongModuleName as M -- <- does not work

     length :: a -> Int
     length _ = 0

     null :: a -> Bool
     null = (== 0) . M.length

However, if I try to compile this, GHC complains about

     AnnoyinglyLongModuleName.hs:4:1:
        Bad interface file: AnnoyinglyLongModuleName.hi
            AnnoyinglyLongModuleName.hi: openBinaryFile: does not exist (No 
such file or directory)

while GHCi tells me:

     Module imports form a cycle:
       module ‘AnnoyinglyLongModuleName’ (AnnoyinglyLongModuleName.hs) imports 
itself


Is there some other way (without CPP) to create a local alias for the
current module-name? If not, is there a reason GHC couldn't support this
special case of self-aliasing the current module name?


PS: Alternatively, this could be done as a language extension but that'd
     require extending the Haskell grammar:

     module AnnoyinglyLongModuleName as M (M.length, M.null) where


Cheers,
    hvr
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to