Better error

This commit is contained in:
Iavor Diatchki 2022-06-06 17:27:30 -07:00
parent f426edca1c
commit 1b42bb5e6a
2 changed files with 17 additions and 12 deletions

View File

@ -637,13 +637,17 @@ instance Rename TopDecl where
$ DParameterConstraint <$> mapM (rnLocated rename) ds
DModule m -> DModule <$> traverse rename m
DImport li -> DImport <$> traverse renI li
DImport li -> DImport <$> renI li
DModParam mp -> DModParam <$> rename mp
renI :: ImportG (ImpName PName) -> RenameM (ImportG (ImpName Name))
renI i = do m <- rename (iModule i)
recordImport m
pure i { iModule = m }
renI :: Located (ImportG (ImpName PName)) ->
RenameM (Located (ImportG (ImpName Name)))
renI li =
do m <- rename (iModule i)
recordImport (srcRange li) m
pure li { thing = i { iModule = m } }
where
i = thing li
instance Rename ModParam where
@ -668,7 +672,7 @@ renameSig nm sig =
ImpTop t -> ModPath (TopModule t)
shadowNames' CheckOverlap env $
depsOf depName
do imps <- traverse (traverse renI) (sigImports sig)
do imps <- traverse renI (sigImports sig)
tps <- traverse rename (sigTypeParams sig)
cts <- traverse (traverse rename) (sigConstraints sig)
fun <- traverse rename (sigFunParams sig)

View File

@ -399,14 +399,14 @@ warnUnused m0 env rw =
* record external dependency if the name refers to an external import
* record an error if the imported thing is a functor
-}
recordImport :: ImpName Name -> RenameM ()
recordImport i =
recordImport :: Range -> ImpName Name -> RenameM ()
recordImport r i =
do ro <- RenameM ask
case Map.lookup i (roResolvedModules ro) of
Just loc ->
case rmodKind loc of
AModule -> pure ()
_ -> bad
k -> recordError (ModuleKindMismatch r i AModule k)
Nothing
| Just topName <- case i of
ImpTop m -> Just m
@ -415,13 +415,14 @@ recordImport i =
RenameM $ sets_ \s ->
s { rwExternalDeps = ifPublic iface <>
rwExternalDeps s }
when (ifaceIsFunctor iface) bad
when (ifaceIsFunctor iface)
(recordError (ModuleKindMismatch r i AModule AFunctor))
-- XXX: This could be a signature, but we don't have top
-- signature interfaces.
-- This may happen if encoutnered an error (e.g., undefined name)
| otherwise -> pure ()
where
bad = recordError (InvalidFunctorImport i)
-- XXX: Maybe we'd want to cache some of the conversion to Mod?
-- | This gives the loaded *external* modules.