@@ -56,7 +56,7 @@ p_rdrName l@(L spn _) = located l $ \x -> do
5656 if AnnOpenP `elem` ids
5757 then parens
5858 else id
59− (m, isUnit) =
59+ (m, avoidParens) =
6060 case x of
6161 Unqual occName ->
6262 (atom occName, False)
@@ -68,8 +68,8 @@ p_rdrName l@(L spn _) = located l $ \x -> do
6868 -- NOTE I'm not sure this "stable string" is stable enough, but
6969 -- it looks like this is the most robust way to tell if we're
7070 -- looking at exactly this piece of built-in syntax.
71− (atom name, nameStableString name == "$ghc-prim$GHC.Tuple$()")
72− if isUnit
71+ (atom name, nameStableString name `elem` avoidParensStableNames)
72+ if avoidParens
7373 then m
7474 else parensWrapper (backticksWrapper m)
7575
@@ -83,3 +83,13 @@ p_ieWildcard :: IEWildcard -> R ()
8383p_ieWildcard = \case
8484 NoIEWildcard -> return ()
8585 IEWildcard n -> parens (atom n)
86+
87+avoidParensStableNames :: [String]
88+avoidParensStableNames =
89+ [ "$ghc-prim$GHC.Tuple$()"
90+ , "$ghc-prim$GHC.Tuple$(,)"
91+ , "$ghc-prim$GHC.Tuple$(,,)"
92+ , "$ghc-prim$GHC.Tuple$(,,,)"
93+ , "$ghc-prim$GHC.Tuple$(,,,,)"
94+ , "$ghc-prim$GHC.Tuple$(,,,,,)"
95+ ]