@@ -109,12 +109,12 @@ compileQName f
109109 parent <- parentName f
110110 par <- traverse (compileName . qnameName) parent
111111 let mod0 = qnameModule $ fromMaybe f parent
112- mod <- compileModuleName mod0
112+ (mkind, mod ) <- compileModuleName mod0
113113
114114 existsInHaskell <- orM
115115 [ pure $ isJust special
116- , pure $ isPrimModule mod
117- , pure $ isHsModule mod
116+ , pure $ mkind == PrimModule
117+ , pure $ mkind == HsModule
118118 , hasCompilePragma f
119119 , isClassFunction f
120120 , isWhereFunction f
@@ -137,8 +137,12 @@ compileQName f
137137 Hs. Symbol _ _ -> getNamespace f
138138 Hs. Ident _ _ -> return (Hs. NoNamespace () ))
139139 let
140- (mod', mimp) = mkImport mod qual par hf namespace
141- qf = qualify mod' hf qual
140+ -- We don't generate "import Prelude" for primitive modules,
141+ -- unless a name is qualified.
142+ mimp = if mkind /= PrimModule || isQualified qual
143+ then Just (Import mod qual par hf namespace)
144+ else Nothing
145+ qf = qualify mod hf qual
142146
143147 -- add (possibly qualified) import
144148 whenM (asks writeImports) $
@@ -202,21 +206,6 @@ compileQName f
202206 (Pi _ absType) -> getResultType $ unAbs absType
203207 _ -> typ
204208
205- mkImport mod qual par hf maybeIsType
206- -- make sure the Prelude is properly qualified
207- | isPrimModule mod
208- = if isQualified qual then
209- let mod' = hsModuleName " Prelude"
210- in (mod', Just (Import mod' qual Nothing hf maybeIsType))
211- else (mod , Nothing )
212- | otherwise
213- = let mod' = dropHaskellPrefix mod
214- in (mod', Just (Import mod' qual par hf maybeIsType))
215-
216- dropHaskellPrefix :: Hs. ModuleName () -> Hs. ModuleName ()
217- dropHaskellPrefix (Hs. ModuleName l s) =
218- Hs. ModuleName l $ fromMaybe s $ stripPrefix " Haskell." s
219-
220209isWhereFunction :: QName -> C Bool
221210isWhereFunction f = do
222211 whereMods <- asks whereModules
@@ -228,17 +217,20 @@ hsTopLevelModuleName = hsModuleName . intercalate "." . map unpack
228217
229218-- | Given a module name (assumed to be a toplevel module),
230219-- compute the associated Haskell module name.
231- compileModuleName :: ModuleName -> C (Hs. ModuleName () )
220+ compileModuleName :: ModuleName -> C (HsModuleKind , Hs. ModuleName () )
232221compileModuleName m = do
233222 tlm <- liftTCM $ hsTopLevelModuleName <$> getTopLevelModuleForModuleName m
234223 reportSDoc " agda2hs.name" 25 $
235224 text " Top-level module name for" <+> prettyTCM m <+>
236225 text " is" <+> text (pp tlm)
237- return tlm
226+ case hsModuleKind tlm of
227+ PrimModule -> return (PrimModule , Hs. ModuleName () " Prelude" )
228+ HsModule -> return (HsModule , dropHaskellPrefix tlm)
229+ AgdaModule -> return (AgdaModule , tlm)
238230
239231importInstance :: QName -> C ()
240232importInstance f = do
241- mod <- compileModuleName $ qnameModule f
242- unless (isPrimModule mod ) $ do
233+ (kind, mod ) <- compileModuleName $ qnameModule f
234+ unless (kind == PrimModule ) $ do
243235 reportSLn " agda2hs.import" 20 $ " Importing instances from " ++ pp mod
244236 tellImport $ ImportInstances mod
0 commit comments