aboutsummaryrefslogtreecommitdiff
path: root/haddock-api/src/Haddock/Backends/Xhtml/Specialize.hs
diff options
context:
space:
mode:
authorƁukasz Hanuszczak <lukasz.hanuszczak@gmail.com>2015-07-19 15:57:10 +0200
committerMateusz Kowalczyk <fuuzetsu@fuuzetsu.co.uk>2015-08-21 18:22:30 +0100
commit2c94f5a7804ecf84f818a64ba41ca5829621323c (patch)
tree2502a1942d261668cc1d264f2ee4ae1c69f1b30d /haddock-api/src/Haddock/Backends/Xhtml/Specialize.hs
parent0495d71981573cf95f28468c7167b96ffd48ac11 (diff)
Fix logic behind binder type renaming.
Diffstat (limited to 'haddock-api/src/Haddock/Backends/Xhtml/Specialize.hs')
-rw-r--r--haddock-api/src/Haddock/Backends/Xhtml/Specialize.hs11
1 files changed, 7 insertions, 4 deletions
diff --git a/haddock-api/src/Haddock/Backends/Xhtml/Specialize.hs b/haddock-api/src/Haddock/Backends/Xhtml/Specialize.hs
index a9c46463..6a149719 100644
--- a/haddock-api/src/Haddock/Backends/Xhtml/Specialize.hs
+++ b/haddock-api/src/Haddock/Backends/Xhtml/Specialize.hs
@@ -193,9 +193,11 @@ renameLTyOp (wrap, lname) = (,) wrap <$> located renameName lname
renameNameBndr :: SetName name => name -> Rename name name
renameNameBndr name = do
fv <- ask
- when (getOccName name `Set.member` fv) $
- freshName name
- renameName name
+ env <- get
+ case Map.lookup (getName name) env of
+ Just name' -> pure name'
+ Nothing | getOccName name `Set.member` fv -> freshName name
+ Nothing -> pure name
renameName :: SetName name => name -> Rename name name
@@ -206,13 +208,14 @@ renameName name = do
Nothing -> name
-freshName :: SetName name => name -> Rename name ()
+freshName :: SetName name => name -> Rename name name
freshName name = do
fv <- ask
env <- get
let taken = Set.union fv (Set.fromList . map getOccName . Map.keys $ env)
let name' = setInternalOccName (findFreshName taken occ) name
put $ Map.insert nname name' env
+ return name'
where
nname = getName name
occ = nameOccName nname