diff options
author | nineonine <mail4chemik@gmail.com> | 2019-10-07 13:45:29 -0500 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2019-10-13 06:31:40 -0400 |
commit | 5ab1a28d91e2e5331bf20b1e3dc0dff793ebca8b (patch) | |
tree | b3895afbc4efd028c0bc0a0f224461d2e9c4a3a4 /libraries/template-haskell/Language/Haskell/TH/Syntax.hs | |
parent | 226d86d29842f894869e23ddb1197d04dacae7f7 (diff) | |
download | haskell-5ab1a28d91e2e5331bf20b1e3dc0dff793ebca8b.tar.gz |
Template Haskell: make unary tuples legal (#16881)
Diffstat (limited to 'libraries/template-haskell/Language/Haskell/TH/Syntax.hs')
-rw-r--r-- | libraries/template-haskell/Language/Haskell/TH/Syntax.hs | 31 |
1 files changed, 11 insertions, 20 deletions
diff --git a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs index 59cc5dceef..81cd588ec8 100644 --- a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs +++ b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs @@ -1534,20 +1534,8 @@ tupleDataName :: Int -> Name -- | Tuple type constructor tupleTypeName :: Int -> Name -tupleDataName 0 = mk_tup_name 0 DataName -tupleDataName 1 = error "tupleDataName 1" -tupleDataName n = mk_tup_name (n-1) DataName - -tupleTypeName 0 = mk_tup_name 0 TcClsName -tupleTypeName 1 = error "tupleTypeName 1" -tupleTypeName n = mk_tup_name (n-1) TcClsName - -mk_tup_name :: Int -> NameSpace -> Name -mk_tup_name n_commas space - = Name occ (NameG space (mkPkgName "ghc-prim") tup_mod) - where - occ = mkOccName ('(' : replicate n_commas ',' ++ ")") - tup_mod = mkModName "GHC.Tuple" +tupleDataName n = mk_tup_name n DataName True +tupleTypeName n = mk_tup_name n TcClsName True -- Unboxed tuple data and type constructors -- | Unboxed tuple data constructor @@ -1555,15 +1543,18 @@ unboxedTupleDataName :: Int -> Name -- | Unboxed tuple type constructor unboxedTupleTypeName :: Int -> Name -unboxedTupleDataName n = mk_unboxed_tup_name n DataName -unboxedTupleTypeName n = mk_unboxed_tup_name n TcClsName +unboxedTupleDataName n = mk_tup_name n DataName False +unboxedTupleTypeName n = mk_tup_name n TcClsName False -mk_unboxed_tup_name :: Int -> NameSpace -> Name -mk_unboxed_tup_name n space +mk_tup_name :: Int -> NameSpace -> Bool -> Name +mk_tup_name n space boxed = Name (mkOccName tup_occ) (NameG space (mkPkgName "ghc-prim") tup_mod) where - tup_occ | n == 1 = "Unit#" -- See Note [One-tuples] in TysWiredIn - | otherwise = "(#" ++ replicate n_commas ',' ++ "#)" + withParens thing + | boxed = "(" ++ thing ++ ")" + | otherwise = "(#" ++ thing ++ "#)" + tup_occ | n == 1 = if boxed then "Unit" else "Unit#" + | otherwise = withParens (replicate n_commas ',') n_commas = n - 1 tup_mod = mkModName "GHC.Tuple" |