@@ -31,6 +31,7 @@ import Control.Applicative
31import Control.Arrow (first)
31import Control.Arrow (first)
32import Control.Monad.State
32import Control.Monad.State
34+import Data.Maybe (fromMaybe, mapMaybe)
34import Data.Function (on)
35import Data.Function (on)
35import Data.Functor.Identity
36import Data.Functor.Identity
36import Data.List (groupBy, sortBy)
37import Data.List (groupBy, sortBy)
@@ -124,9 +125,16 @@ collectFixities m moduleName (FixityDeclaration fixity name : rest) = do
124 let qual = Qualified (Just moduleName) (Op name)
125 let qual = Qualified (Just moduleName) (Op name)
125 when (qual `M.member` m) (Left $ "redefined fixity for " ++ show name)
126 when (qual `M.member` m) (Left $ "redefined fixity for " ++ show name)
126 collectFixities (M.insert qual fixity m) moduleName rest
127 collectFixities (M.insert qual fixity m) moduleName rest
127−collectFixities m moduleName (ImportDeclaration importedModule _ _ : rest) = do
128+collectFixities m moduleName (ImportDeclaration importedModule explImports qual : rest) = do
129+ let qualName = fromMaybe moduleName qual
128− let fs = [ (i, fixity) | (Qualified mn i, fixity) <- M.toList m, mn == Just importedModule ]
130+ let fs = [ (i, fixity) | (Qualified mn i, fixity) <- M.toList m, mn == Just importedModule && isImported explImports i ]
129− let m' = M.fromList (map (first (Qualified (Just moduleName))) fs)
131+ let m' = M.fromList (map (first (Qualified (Just qualName))) fs)
130 collectFixities (m' `M.union` m) moduleName rest
132 collectFixities (m' `M.union` m) moduleName rest
134+ isImported Nothing _ = True
135+ isImported (Just imps) i = i `elem` (mapMaybe getExportedValue imps)
136+ getExportedValue (ValueRef name) = Just name
137+ getExportedValue _ = Nothing
131collectFixities m moduleName (_:ds) = collectFixities m moduleName ds
139collectFixities m moduleName (_:ds) = collectFixities m moduleName ds