Skip to content

Bad warnings about unused imports that are in fact needed

If I compile the following code with the -W flag I get a warning about the import of Data.Ix that shouldn't be generated, since this import is actually needed:

{-# OPTIONS_GHC -fglasgow-exts #-}
module ArrayBoundedU
   ( T
   , create
   , at
   ) where

import Data.Ix
import qualified Data.Array.Unboxed as Array
import Data.Array.Base (unsafeAt)

newtype T i e = T (Array.UArray i e)

create :: (Ix i, Bounded i, Array.IArray Array.UArray e) => [(i,e)] -> T i e
create ies = T (Array.array (minBound, maxBound) ies)

at :: (Ix i, Bounded i, Array.IArray Array.UArray e) => T i e -> i -> e
at (T a) i = unsafeAt a (index (minBound, maxBound) i)

with a sample Main

module Main where

import Data.Ix
import ArrayBoundedU

data I = One | Two | Three
   deriving (Eq, Ord, Ix, Bounded)

main = do
   let
      a = create [(One, 10::Int), (Two, 20), (Three, 30)]
   putStrLn (show (at a Two))

built using ghc6.6 with:

ghc --make Main.hs -W

I get the warning:

ArrayBoundedU.hs:8:0:
   Warning: Module `Data.Ix' is imported, but nothing from it is used,
      except perhaps instances visible in `Data.Ix'
   To suppress this warning, use: import Data.Ix()

However if I do this then the code doesn't compile at all, since the import is needed.

This is just a very trivial little thing but it prevents me from being able to get my code to compile with no warnings (unless I switched the warning off altogether but then something else which really was unused would go undetected).

Trac metadata
Trac field Value
Version 6.6
Type Bug
TypeOfFailure OtherFailure
Priority lowest
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information