@@ -148,7 +148,7 @@ desugarImports modules = do
148 renameInModule' :: ExportEnvironment -> ExportEnvironment -> Module -> Either String Module
148 renameInModule' :: ExportEnvironment -> ExportEnvironment -> Module -> Either String Module
149 renameInModule' unfilteredExports exports m@(Module mn _ _) = rethrowForModule m $ do
149 renameInModule' unfilteredExports exports m@(Module mn _ _) = rethrowForModule m $ do
150 let env = M.update (\_ -> M.lookup mn unfilteredExports) mn exports
150 let env = M.update (\_ -> M.lookup mn unfilteredExports) mn exports
151− let exps = fromMaybe (error "Module is missing in renameInModule'") $ M.lookup mn exports
151+ let exps = fromMaybe (error "Module is missing in renameInModule'") $ M.lookup mn exports
152 imports <- resolveImports env m
152 imports <- resolveImports env m
153 renameInModule imports env (elaborateExports exps m)
153 renameInModule imports env (elaborateExports exps m)
@@ -160,7 +160,7 @@ rethrowForModule (Module mn _ _) = flip catchError $ \e -> throwError ("Error in
162-- Make all exports for a module explicit. This may still effect modules that have an exports list,
162-- Make all exports for a module explicit. This may still effect modules that have an exports list,
163−-- as it will also make all data constructor exports explicit.
163+-- as it will also make all data constructor exports explicit.
165elaborateExports :: Exports -> Module -> Module
165elaborateExports :: Exports -> Module -> Module
166elaborateExports exps (Module mn decls _) = Module mn decls (Just $
166elaborateExports exps (Module mn decls _) = Module mn decls (Just $
@@ -178,6 +178,8 @@ renameInModule imports exports (Module mn decls exps) =
179 updateDecl (TypeInstanceDeclaration name cs cn ts ds) =
179 updateDecl (TypeInstanceDeclaration name cs cn ts ds) =
180 TypeInstanceDeclaration name <$> updateConstraints cs <*> updateClassName cn <*> pure ts <*> pure ds
180 TypeInstanceDeclaration name <$> updateConstraints cs <*> updateClassName cn <*> pure ts <*> pure ds
181+ updateDecl (ExternInstanceDeclaration name cs cn ts) =
182+ ExternInstanceDeclaration name <$> updateConstraints cs <*> updateClassName cn <*> pure ts
181 updateDecl d = return d
183 updateDecl d = return d
183 updateVars :: Declaration -> Either String Declaration
185 updateVars :: Declaration -> Either String Declaration
@@ -378,6 +380,7 @@ resolveImport currentModule importModule exps imps = maybe importAll (foldM impo
378 _ <- checkImportExists "type class" classes name
380 _ <- checkImportExists "type class" classes name
379 typeClasses' <- updateImports (importedTypeClasses imp) name
381 typeClasses' <- updateImports (importedTypeClasses imp) name
380 return $ imp { importedTypeClasses = typeClasses' }
382 return $ imp { importedTypeClasses = typeClasses' }
383+ importExplicit _ _ = error "Invalid argument to importExplicit"
382 -- Find all exported data constructors for a given type
385 -- Find all exported data constructors for a given type
383 allExportedDataConstructors :: ProperName -> [ProperName]
386 allExportedDataConstructors :: ProperName -> [ProperName]