Skip to content

Commit f353179

Browse files
committed
fix: Avoid generating names in constructor field which clash with params
Signed-off-by: George Thomas <[email protected]>
1 parent f735c75 commit f353179

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

primer/src/Primer/Action/Available.hs

+3-2
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ import Primer.Primitives (tChar, tInt)
8181
import Primer.Questions (
8282
generateNameExpr,
8383
generateNameTy,
84+
generateNameTyAvoiding,
8485
variablesInScopeExpr,
8586
variablesInScopeTy,
8687
)
@@ -490,8 +491,8 @@ options typeDefs defs cxt level def0 sel0 = \case
490491
Left zE -> generateNameExpr typeOrKind zE
491492
Right zT -> generateNameTy typeOrKind zT
492493
SelectionTypeDef sel -> do
493-
(_, zT) <- conField sel
494-
pure $ generateNameTy typeOrKind zT
494+
(def, zT) <- conField sel
495+
pure $ generateNameTyAvoiding (unLocalName . fst <$> astTypeDefParameters def) typeOrKind zT
495496
varsInScope = case sel0 of
496497
SelectionDef sel -> do
497498
nodeSel <- sel.node

primer/src/Primer/Questions.hs

+11-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ module Primer.Questions (
1010
ShadowedVarsTy (..), -- only exported for testing
1111
generateNameExpr,
1212
generateNameTy,
13+
generateNameTyAvoiding,
1314
uniquify,
1415
) where
1516

@@ -100,9 +101,18 @@ generateNameTy ::
100101
Either (Maybe (Type' ())) (Maybe Kind) ->
101102
TypeZip ->
102103
m [Name]
104+
generateNameTy = generateNameTyAvoiding []
105+
106+
generateNameTyAvoiding ::
107+
MonadReader Cxt m =>
108+
[Name] ->
109+
Either (Maybe (Type' ())) (Maybe Kind) ->
110+
TypeZip ->
111+
m [Name]
103112
-- It doesn't really make sense to ask for a term variable (Left) here, but
104113
-- it doesn't harm to support it
105-
generateNameTy tk z = uniquifyMany <$> mkAvoidForFreshNameTy z <*> baseNames tk
114+
generateNameTyAvoiding avoiding tk z =
115+
uniquifyMany <$> ((Set.fromList avoiding <>) <$> mkAvoidForFreshNameTy z) <*> baseNames tk
106116

107117
baseNames ::
108118
MonadReader Cxt m =>

0 commit comments

Comments
 (0)