Skip to content

Commit 0a91a73

Browse files
Anchor imports at Agda2Hs.Language.Haskell
1 parent 3b48e8e commit 0a91a73

File tree

18 files changed

+162
-197
lines changed

18 files changed

+162
-197
lines changed

src/Agda2Hs/Compile.hs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,7 @@ import Agda2Hs.Compile.Types
3131
import Agda2Hs.Compile.Utils
3232
import Agda2Hs.Pragma
3333

34-
import qualified Language.Haskell.Exts.Extension as Hs
35-
import qualified Language.Haskell.Exts.Syntax as Hs
36-
import qualified Language.Haskell.Exts.Pretty as Hs
34+
import qualified Agda2Hs.Language.Haskell as Hs
3735

3836

3937
initCompileEnv :: TopLevelModuleName -> SpecialRules -> CompileEnv

src/Agda2Hs/Compile/ClassInstance.hs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@ import Data.List ( nub )
88
import Data.Maybe ( isNothing, mapMaybe )
99
import qualified Data.HashMap.Strict as HMap
1010

11-
import qualified Language.Haskell.Exts.Extension as Hs
12-
import qualified Language.Haskell.Exts.Syntax as Hs
13-
1411
import Agda.Compiler.Backend
1512
import Agda.Compiler.Common ( curDefs, sortDefs )
1613

@@ -40,7 +37,8 @@ import Agda2Hs.Compile.Term
4037
import Agda2Hs.Compile.Type
4138
import Agda2Hs.Compile.Types
4239
import Agda2Hs.Compile.Utils
43-
import Agda2Hs.Language.Haskell.Utils
40+
41+
import qualified Agda2Hs.Language.Haskell as Hs
4442

4543

4644
enableCopatterns :: C a -> C a
@@ -94,7 +92,7 @@ compileInstance ToDefinition def@Defn{..} =
9492
<$> mapM (\c -> withClauseLocals mod c $ compileInstanceClause mod ty c) clauses
9593
reportSDoc "agda2hs.compile.instance" 20 $ vcat $
9694
text "compileInstance compiled clauses: " :
97-
map (nest 2 . text . pp) ds
95+
map (nest 2 . text . Hs.pp) ds
9896
when (length (nub rs) > 1) $
9997
genericDocError =<< fsep (pwords "More than one minimal record used.")
10098
return $ Hs.InstDecl () Nothing ir (Just ds)
@@ -214,7 +212,7 @@ compileInstanceClause' curModule ty (p:ps) c
214212
ls <- asks locals
215213
reportSDoc "agda2hs.compile.instance" 18 $ text "Clause locals:" <+> prettyTCM ls
216214

217-
let uf = hsName $ prettyShow $ nameConcrete $ qnameName q
215+
let uf = Hs.hsName $ prettyShow $ nameConcrete $ qnameName q
218216

219217
let
220218
(.~) :: QName -> QName -> Bool
@@ -248,11 +246,11 @@ compileInstanceClause' curModule ty (p:ps) c
248246
let mod = if isExtendedLambdaName defName then curModule else qnameModule defName
249247
(fc, rs) <- withCurrentModule mod $
250248
concatUnzip <$> mapM (compileInstanceClause mod defType) (funClauses theDef)
251-
let hd = hsName $ prettyShow $ nameConcrete $ qnameName defName
252-
let fc' = {- dropPatterns 1 $ -} replaceName hd uf fc
249+
let hd = Hs.hsName $ prettyShow $ nameConcrete $ qnameName defName
250+
let fc' = {- dropPatterns 1 $ -} Hs.replaceName hd uf fc
253251
reportSDoc "agda2hs.compile.instance" 6 $ vcat $
254252
text "compileInstanceClause compiled clause: " :
255-
map (nest 2 . text . pp) fc'
253+
map (nest 2 . text . Hs.pp) fc'
256254
return (fc', n:rs)
257255

258256
-- Projection of a default implementation: drop while making sure these are drawn from the
@@ -291,7 +289,7 @@ compileInstanceClause' curModule ty (p:ps) c
291289
let cc = Hs.FunBind () (toList ms)
292290
reportSDoc "agda2hs.compile.instance" 20 $ vcat
293291
[ text "compileInstanceClause compiled clause"
294-
, nest 2 $ text $ pp cc
292+
, nest 2 $ text $ Hs.pp cc
295293
]
296294
return ([Hs.InsDecl () cc], [])
297295

@@ -340,5 +338,5 @@ lookupDefaultImplementations recName fields = do
340338
classMemberNames :: Definition -> C [Hs.Name ()]
341339
classMemberNames def =
342340
case theDef def of
343-
Record{recFields = fs} -> fmap unQual <$> traverse compileQName (map unDom fs)
341+
Record{recFields = fs} -> fmap Hs.unQual <$> traverse compileQName (map unDom fs)
344342
_ -> genericDocError =<< text "Not a record:" <+> prettyTCM (defName def)

src/Agda2Hs/Compile/Data.hs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
module Agda2Hs.Compile.Data where
22

3-
import qualified Language.Haskell.Exts.Syntax as Hs
4-
53
import Control.Monad ( when )
64
import Agda.Compiler.Backend
75
import Agda.Syntax.Common
@@ -18,7 +16,8 @@ import Agda.Utils.Impossible ( __IMPOSSIBLE__ )
1816
import Agda2Hs.Compile.Type ( compileDomType, compileTeleBinds )
1917
import Agda2Hs.Compile.Types
2018
import Agda2Hs.Compile.Utils
21-
import Agda2Hs.Language.Haskell.Utils
19+
20+
import qualified Agda2Hs.Language.Haskell as Hs
2221

2322
checkNewtype :: Hs.Name () -> [Hs.QualConDecl ()] -> C ()
2423
checkNewtype name cs = do
@@ -29,7 +28,7 @@ checkNewtype name cs = do
2928

3029
compileData :: AsNewType -> [Hs.Deriving ()] -> Definition -> C [Hs.Decl ()]
3130
compileData newtyp ds def = do
32-
let d = hsName $ prettyShow $ qnameName $ defName def
31+
let d = Hs.hsName $ prettyShow $ qnameName $ defName def
3332
checkValidTypeName d
3433
let Datatype{dataPars = n, dataIxs = numIxs, dataCons = cs} = theDef def
3534
TelV tel t <- telViewUpTo n (defType def)
@@ -63,7 +62,7 @@ compileConstructor params c = do
6362
ty <- (`piApplyM` params) . defType =<< getConstInfo c
6463
reportSDoc "agda2hs.data.con" 20 $ text " ty = " <+> prettyTCM ty
6564
TelV tel _ <- telView ty
66-
let conName = hsName $ prettyShow $ qnameName c
65+
let conName = Hs.hsName $ prettyShow $ qnameName c
6766
checkValidConName conName
6867
args <- compileConstructorArgs tel
6968
return $ Hs.QualConDecl () Nothing Nothing $ Hs.ConDecl () conName args

src/Agda2Hs/Compile/Function.hs

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@ import Data.List
1010
import Data.Maybe ( fromMaybe, isJust )
1111
import qualified Data.Text as Text
1212

13-
import qualified Language.Haskell.Exts.Build as Hs (charP)
14-
import qualified Language.Haskell.Exts.Syntax as Hs
15-
import qualified Language.Haskell.Exts.Pretty as Hs
16-
1713
import Agda.Compiler.Backend
1814
import Agda.Compiler.Common
1915

@@ -48,8 +44,8 @@ import Agda2Hs.Compile.TypeDefinition ( compileTypeDef )
4844
import Agda2Hs.Compile.Types
4945
import Agda2Hs.Compile.Utils
5046
import Agda2Hs.Compile.Var ( compileDBVar )
51-
import Agda2Hs.Language.Haskell.Utils
5247

48+
import qualified Agda2Hs.Language.Haskell as Hs
5349

5450
-- | Compilation rules for specific constructors in patterns.
5551
isSpecialCon :: QName -> Maybe (Type -> NAPs -> C (Hs.Pat ()))
@@ -166,7 +162,7 @@ compileFun' withSig def@Defn{..} = inTopContext $ withCurrentModule m $ do
166162
Function{..} = theDef
167163
m = qnameModule defName
168164
n = qnameName defName
169-
x = hsName $ prettyShow n
165+
x = Hs.hsName $ prettyShow n
170166
err = "Not supported: type definition with `where` clauses"
171167

172168
addPats :: [Hs.Pat ()] -> Hs.Match () -> Hs.Match ()
@@ -179,10 +175,10 @@ compileModuleParams EmptyTel = return (id, [])
179175
compileModuleParams (ExtendTel a tel) = do
180176
(f , p) <- compileDomType (absName tel) a >>= \case
181177
DomDropped -> return (id, [])
182-
DomConstraint c -> return (constrainType c, [])
183-
DomForall a -> return (qualifyType a, [])
178+
DomConstraint c -> return (Hs.constrainType c, [])
179+
DomForall a -> return (Hs.qualifyType a, [])
184180
DomType s a -> do
185-
let n = hsName $ absName tel
181+
let n = Hs.hsName $ absName tel
186182
checkValidVarName n
187183
return (Hs.TyFun () a, [Hs.PVar () n])
188184
((f .) *** (p++)) <$> underAbstraction a tel compileModuleParams
@@ -290,7 +286,7 @@ compilePat :: Type -> DeBruijnPattern -> C (Hs.Pat ())
290286
compilePat ty p@(VarP o x)
291287
| PatOWild <- patOrigin o = return $ Hs.PWildCard ()
292288
| otherwise = do
293-
n <- hsName <$> compileDBVar (dbPatVarIndex x)
289+
n <- Hs.hsName <$> compileDBVar (dbPatVarIndex x)
294290
checkValidVarName n
295291
return $ Hs.PVar () n
296292

@@ -304,7 +300,7 @@ compilePat ty (ConP ch i ps) = do
304300
ifJustM (isTupleConstructor c) (\b -> compileTupleConP ty b ps) $ do
305301
ps <- compilePats ty ps
306302
c <- compileQName (conName ch)
307-
return $ pApp c ps
303+
return $ Hs.pApp c ps
308304

309305
-- literal patterns
310306
compilePat ty (LitP _ l) = compileLitPat l
@@ -314,7 +310,7 @@ compilePat ty (LitP _ l) = compileLitPat l
314310
compilePat _ p = genericDocError =<< "bad pattern:" <?> prettyTCM p
315311

316312

317-
compileErasedConP :: Type -> Strictness -> NAPs -> C (Hs.Pat ())
313+
compileErasedConP :: Type -> Hs.Strictness -> NAPs -> C (Hs.Pat ())
318314
compileErasedConP ty s ps = compilePats ty ps >>= \case
319315
[p] -> addPatBang s p
320316
_ -> __IMPOSSIBLE__
@@ -384,7 +380,7 @@ checkTransparentPragma def = compileFun False def >>= \case
384380
where
385381
checkTransparentClause :: Hs.Match () -> C ()
386382
checkTransparentClause = \case
387-
Hs.Match _ _ [p] (Hs.UnGuardedRhs _ e) _ | patToExp p == Just e -> return ()
383+
Hs.Match _ _ [p] (Hs.UnGuardedRhs _ e) _ | Hs.patToExp p == Just e -> return ()
388384
_ -> errNotTransparent
389385

390386
checkTransparentTypeDef :: Hs.DeclHead () -> Hs.Type () -> C ()

src/Agda2Hs/Compile/Function.hs-boot

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module Agda2Hs.Compile.Function where
22

3-
import qualified Language.Haskell.Exts.Syntax as Hs ( Match, Name )
3+
import qualified Agda2Hs.Language.Haskell as Hs ( Match, Name )
44
import Agda.Syntax.Internal ( Clause, ModuleName, QName, Type )
55
import Agda2Hs.Compile.Types ( C )
66

src/Agda2Hs/Compile/Imports.hs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ module Agda2Hs.Compile.Imports ( compileImports, preludeImportDecl ) where
22

33
import Data.Char ( isUpper )
44
import Data.List ( isPrefixOf )
5+
import qualified Data.List as L
56
import Data.Map ( Map )
67
import qualified Data.Map as Map
78
import Data.Set ( Set )
89
import qualified Data.Set as Set
910

10-
import qualified Language.Haskell.Exts.Pretty as Hs
11-
import qualified Language.Haskell.Exts.Syntax as Hs
11+
import qualified Agda2Hs.Language.Haskell as Hs
1212

1313
import Agda.Compiler.Backend
1414
import Agda.TypeChecking.Pretty ( text )
@@ -18,8 +18,6 @@ import Agda2Hs.AgdaUtils
1818
import Agda2Hs.Compile.Name
1919
import Agda2Hs.Compile.Types
2020
import Agda2Hs.Compile.Utils
21-
import Agda2Hs.Language.Haskell.Utils
22-
import qualified Data.List as L
2321

2422
type ImportSpecMap = Map NamespacedName (Set NamespacedName)
2523
type ImportDeclMap = Map (Hs.ModuleName (), Qualifier) ImportSpecMap
@@ -29,7 +27,7 @@ compileImports top is0 = do
2927
let is = filter ((top /=) . Hs.prettyPrint . importModule) is0
3028
checkClashingImports is
3129
let imps = Map.toList $ groupModules is
32-
reportSLn "agda2hs.import" 10 $ "All imported modules: " ++ show (map (pp . fst . fst) imps)
30+
reportSLn "agda2hs.import" 10 $ "All imported modules: " ++ show (map (Hs.pp . fst . fst) imps)
3331
let decls = map (uncurry $ uncurry makeImportDecl) imps
3432
return decls
3533
where
@@ -88,17 +86,17 @@ compileImports top is0 = do
8886
isClashing (Import _ as' p' q' _) = (as' == as) && (p' /= p) && (q' == q)
8987
isClashing ImportInstances{} = False
9088
mkErrorMsg (Import _ _ p' q' _) =
91-
"Clashing import: " ++ pp q ++ " (both from "
92-
++ prettyShow (pp <$> p) ++ " and "
93-
++ prettyShow (pp <$> p') ++ ")"
89+
"Clashing import: " ++ Hs.pp q ++ " (both from "
90+
++ prettyShow (Hs.pp <$> p) ++ " and "
91+
++ prettyShow (Hs.pp <$> p') ++ ")"
9492
-- TODO: no range information as we only have Haskell names at this point
9593
checkClashingImports (ImportInstances mod : is) = checkClashingImports is
9694

9795

9896
-- | Generate a prelude import considering prelude config options (hiding, implicit, etc).
9997
preludeImportDecl :: PreludeOptions -> Hs.ImportDecl ()
10098
preludeImportDecl (PreludeOpts{..}) =
101-
let toName s | validVarId s || validConId s = Hs.Ident () s
99+
let toName s | Hs.validVarId s || Hs.validConId s = Hs.Ident () s
102100
toName s = Hs.Symbol () s
103101

104102
-- if the prelude is implicit, we use the provided hiding list.

src/Agda2Hs/Compile/Name.hs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ import Data.List ( intercalate, isPrefixOf, stripPrefix )
1212
import Data.Text ( unpack )
1313
import qualified Data.Map.Strict as Map
1414

15-
import qualified Language.Haskell.Exts.Pretty as Hs
16-
import qualified Language.Haskell.Exts.Syntax as Hs
17-
1815
import Agda.Compiler.Backend hiding ( topLevelModuleName )
1916
import Agda.Compiler.Common ( topLevelModuleName )
2017

@@ -37,12 +34,13 @@ import Agda.TypeChecking.Warnings ( warning )
3734
import qualified Agda.Utils.List1 as List1
3835
import Agda.Utils.Monad
3936
import Agda.Utils.Maybe ( isJust, isNothing, whenJust, fromMaybe, caseMaybeM )
40-
import Agda.Utils.Monad ( whenM )
37+
import Agda.Utils.Monad ( orM, whenM )
4138

4239
import Agda2Hs.AgdaUtils
4340
import Agda2Hs.Compile.Types
4441
import Agda2Hs.Compile.Utils
45-
import Agda2Hs.Language.Haskell.Utils
42+
43+
import qualified Agda2Hs.Language.Haskell as Hs
4644

4745

4846
isSpecialCon :: QName -> Maybe (Hs.QName ())
@@ -57,10 +55,10 @@ isSpecialCon = prettyShow >>> \case
5755

5856
-- | Convert identifier and import module strings into the Haskell equivalent syntax.
5957
toNameImport :: String -> Maybe String -> (Hs.Name (), Maybe Import)
60-
toNameImport x Nothing = (hsName x, Nothing)
58+
toNameImport x Nothing = (Hs.hsName x, Nothing)
6159
toNameImport x (Just mod) =
62-
( hsName x
63-
, Just $ Import (hsModuleName mod) Unqualified Nothing (hsName x) (Hs.NoNamespace ())
60+
( Hs.hsName x
61+
, Just $ Import (Hs.hsModuleName mod) Unqualified Nothing (Hs.hsName x) (Hs.NoNamespace ())
6462
)
6563

6664
-- | Default rewrite rules.
@@ -89,7 +87,7 @@ isSpecialName :: QName -> C (Maybe (Hs.Name (), Maybe Import))
8987
isSpecialName f = asks (Map.lookup (prettyShow f) . rewrites)
9088

9189
compileName :: Applicative m => Name -> m (Hs.Name ())
92-
compileName n = hsName . show <$> pretty (nameConcrete n)
90+
compileName n = Hs.hsName . show <$> pretty (nameConcrete n)
9391

9492
compileQName :: QName -> C (Hs.QName ())
9593
compileQName f
@@ -157,8 +155,8 @@ compileQName f
157155
++ "\nmod0: " ++ prettyShow mod0
158156
++ "\nmodule name: " ++ Hs.prettyPrint mod
159157
++ "\ncurrent module: " ++ Hs.prettyPrint currMod
160-
++ "\nqualifier: " ++ prettyShow (fmap (fmap pp) qual)
161-
++ "\n(qualified) haskell name: " ++ pp qf
158+
++ "\nqualifier: " ++ prettyShow (fmap (fmap Hs.pp) qual)
159+
++ "\n(qualified) haskell name: " ++ Hs.pp qf
162160
return qf
163161
where
164162
parentName :: QName -> C (Maybe QName)
@@ -174,7 +172,7 @@ compileQName f
174172
(inverseScopeLookupName f <$> getScope) >>= \case
175173
(C.QName{} : _) -> return Unqualified
176174
(C.Qual as C.QName{} : _) -> liftTCM $ do
177-
let qual = hsModuleName $ prettyShow as
175+
let qual = Hs.hsModuleName $ prettyShow as
178176
lookupModuleInCurrentModule as >>= \case
179177
(x:_) | qual /= mod -> do
180178
isDataMod <- isJust <$> isDatatypeModule (amodName x)
@@ -213,7 +211,7 @@ isWhereFunction f = do
213211
return $ any (qnameModule f `isLeChildModuleOf`) whereMods
214212

215213
hsTopLevelModuleName :: TopLevelModuleName -> Hs.ModuleName ()
216-
hsTopLevelModuleName = hsModuleName . intercalate "." . map unpack
214+
hsTopLevelModuleName = Hs.hsModuleName . intercalate "." . map unpack
217215
. List1.toList . moduleNameParts
218216

219217
-- | Given a module name (assumed to be a toplevel module),
@@ -223,7 +221,7 @@ compileModuleName m = do
223221
tlm <- liftTCM $ hsTopLevelModuleName <$> getTopLevelModuleForModuleName m
224222
reportSDoc "agda2hs.name" 25 $
225223
text "Top-level module name for" <+> prettyTCM m <+>
226-
text "is" <+> text (pp tlm)
224+
text "is" <+> text (Hs.pp tlm)
227225
case hsModuleKind tlm of
228226
PrimModule -> return (PrimModule, Hs.ModuleName () "Prelude")
229227
HsModule -> return (HsModule, dropHaskellPrefix tlm)
@@ -233,5 +231,5 @@ importInstance :: QName -> C ()
233231
importInstance f = do
234232
(kind, mod) <- compileModuleName $ qnameModule f
235233
unless (kind == PrimModule) $ do
236-
reportSLn "agda2hs.import" 20 $ "Importing instances from " ++ pp mod
234+
reportSLn "agda2hs.import" 20 $ "Importing instances from " ++ Hs.pp mod
237235
tellImport $ ImportInstances mod

src/Agda2Hs/Compile/Postulate.hs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
module Agda2Hs.Compile.Postulate where
22

3-
import qualified Language.Haskell.Exts.Syntax as Hs
4-
53
import Agda.Compiler.Backend
64

75
import Agda.Syntax.Internal
@@ -10,15 +8,16 @@ import Agda.Syntax.Common.Pretty ( prettyShow )
108
import Agda2Hs.Compile.Type ( compileType )
119
import Agda2Hs.Compile.Types
1210
import Agda2Hs.Compile.Utils
13-
import Agda2Hs.Language.Haskell.Utils
11+
12+
import qualified Agda2Hs.Language.Haskell as Hs
1413

1514
compilePostulate :: Definition -> C [Hs.Decl ()]
1615
compilePostulate def = do
1716
let n = qnameName (defName def)
18-
x = hsName $ prettyShow n
17+
x = Hs.hsName $ prettyShow n
1918
checkValidFunName x
2019
setCurrentRange (nameBindingSite n) $ do
2120
ty <- compileType (unEl $ defType def)
22-
let body = hsError $ "postulate: " ++ pp ty
21+
let body = Hs.hsError $ "postulate: " ++ Hs.pp ty
2322
return [ Hs.TypeSig () [x] ty
2423
, Hs.FunBind () [Hs.Match () x [] (Hs.UnGuardedRhs () body) Nothing] ]

0 commit comments

Comments
 (0)