Redundant import warning is sometimes not correct
When working on my usb-safe library I just discovered a warning message that doesn't seem right.
Suppose you have the following three modules:
(I tried to trim down the problem so I simplified and changed most types, classes, instances and functions. They don't matter for this discussion. The only things that matter are the names that are in- and exported)
Resource.hs:
{-# LANGUAGE TypeFamilies #-}
module Resource ( Resource, Handle, open, close ) where
class Resource r where
data Handle r :: *
open :: r -> IO (Handle r)
close :: Handle r -> IO ()
Region.hs:
module Region ( open, run ) where
open :: Char -> String
open = (:[])
run :: Maybe a -> Bool
run = maybe False (const True)
USB.hs:
{-# LANGUAGE TypeFamilies #-}
module USB ( Device(..)
, claim
, foo
, module Region
) where
import Resource ( Resource, Handle, open, close )
import Region
import qualified Region as QualifiedRegion ( open )
newtype Device = Device {unDevice :: Int}
instance Resource Device where
data Handle Device = DeviceHandle Int
open = return . DeviceHandle . unDevice
close = const $ return ()
claim :: Char -> String
claim = QualifiedRegion.open
foo :: Maybe a -> Bool
foo = run
When I load USB.hs in ghci with all warnings on I get the following warning:
$ ghci -Wall USB.hs
USB.hs:9:0:
Warning: The import of `Resource.open'
from module `Resource' is redundant
Ok, modules loaded: USB, Region, Resource.
Why is Resource.open
redundant while I use it in an instance declaration?
If the warning is correct so Resource.open
is redundant we can just as well remove the import. However when I remove it I get the following error:
USB.hs:18:4: `open' is not a (visible) method of class `Resource'
Failed, modules loaded: Region, Resource.
Trac metadata
Trac field | Value |
---|---|
Version | 6.12.1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |