@@ -15,7 +15,7 @@ import Control.Monad.Error.Class (MonadError(..))
15import Control.Monad.Reader (MonadReader, asks)
15import Control.Monad.Reader (MonadReader, asks)
16import Control.Monad.Supply.Class
16import Control.Monad.Supply.Class
18−import Data.List ((\\), delete, intersect)
18+import Data.List ((\\), delete, intersect, nub)
19import Data.Maybe (isNothing, fromMaybe)
19import Data.Maybe (isNothing, fromMaybe)
20import qualified Data.Foldable as F
20import qualified Data.Foldable as F
21import qualified Data.Map as M
21import qualified Data.Map as M
@@ -51,7 +51,7 @@ moduleToJs (Module coms mn imps exps foreigns decls) foreign_ =
51 rethrow (addHint (ErrorInModule mn)) $ do
51 rethrow (addHint (ErrorInModule mn)) $ do
52 let usedNames = concatMap getNames decls
52 let usedNames = concatMap getNames decls
53 let mnLookup = renameImports usedNames imps
53 let mnLookup = renameImports usedNames imps
54− jsImports <- T.traverse (importToJs mnLookup) . delete (ModuleName [ProperName C.prim]) . (\\ [mn]) $ map snd imps
54+ jsImports <- T.traverse (importToJs mnLookup) . delete (ModuleName [ProperName C.prim]) . (\\ [mn]) $ nub $ map snd imps
55 let decls' = renameModules mnLookup decls
55 let decls' = renameModules mnLookup decls
56 jsDecls <- mapM bindToJs decls'
56 jsDecls <- mapM bindToJs decls'
57 optimized <- T.traverse (T.traverse optimize) jsDecls
57 optimized <- T.traverse (T.traverse optimize) jsDecls
@@ -89,7 +89,7 @@ moduleToJs (Module coms mn imps exps foreigns decls) foreign_ =
89 in if mn' /= mn && mni `elem` used
89 in if mn' /= mn && mni `elem` used
90 then let newName = freshModuleName 1 mn' used
90 then let newName = freshModuleName 1 mn' used
91 in go (M.insert mn' (ann, newName) acc) (Ident (runModuleName newName) : used) mns'
91 in go (M.insert mn' (ann, newName) acc) (Ident (runModuleName newName) : used) mns'
92− else go (M.insert mn' (ann, mn') acc) (mni : used) mns'
92+ else go (M.insert mn' (ann, mn') acc) used mns'
93 go acc _ [] = acc
93 go acc _ [] = acc
95 freshModuleName :: Integer -> ModuleName -> [Ident] -> ModuleName
95 freshModuleName :: Integer -> ModuleName -> [Ident] -> ModuleName