Technically in Haskell 2010 this is illegal:
module A( f ) where
f = True
module B where
import A hiding( g ) -- A does not export g
g = f
The import A hiding( g )
in module B
is technically an error (Haskell Report, 5.3.1) because A
does not export g
. However GHC allows it, in the interests of supporting backward compatibility; for example, a newer version of A
might export g
, and you want B
to work in either case.
The warning -Wdodgy-imports
, which is off by default but included with -W
, warns if you hide something that the imported module does not export.