diff options
author | Ryan Scott <ryan.gl.scott@gmail.com> | 2016-12-14 16:47:53 -0500 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2016-12-15 10:42:25 -0500 |
commit | 9550b8d810c3ce9fcf3419da367041124e2673de (patch) | |
tree | e9abfa4cbc4b90364a22d4f4c528c43561eb0dc6 /libraries/template-haskell | |
parent | fe5d68ad1ae5faaaf786f334edf251295195ef6d (diff) | |
download | haskell-9550b8d810c3ce9fcf3419da367041124e2673de.tar.gz |
Make unboxedTuple{Type,Data}Name support 0- and 1-tuples
Previously, these functions were hardcoded so as to always `error`
whenever given an argument of 0 or 1. This restriction can be lifted
pretty easily, however.
This requires a slight tweak to `isBuiltInOcc_maybe` in `TysWiredIn` to
allow it to recognize `Unit#` (which is the hard-wired `OccName` for
unboxed 1-tuples).
Fixes #12977.
Test Plan: make test TEST=12977
Reviewers: austin, goldfire, bgamari
Reviewed By: bgamari
Subscribers: thomie
Differential Revision: https://phabricator.haskell.org/D2847
GHC Trac Issues: #12977
Diffstat (limited to 'libraries/template-haskell')
-rw-r--r-- | libraries/template-haskell/Language/Haskell/TH/Syntax.hs | 19 | ||||
-rw-r--r-- | libraries/template-haskell/changelog.md | 3 |
2 files changed, 11 insertions, 11 deletions
diff --git a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs index 4e21e8b841..c9bccf665f 100644 --- a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs +++ b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs @@ -1187,20 +1187,17 @@ unboxedTupleDataName :: Int -> Name -- | Unboxed tuple type constructor unboxedTupleTypeName :: Int -> Name -unboxedTupleDataName 0 = error "unboxedTupleDataName 0" -unboxedTupleDataName 1 = error "unboxedTupleDataName 1" -unboxedTupleDataName n = mk_unboxed_tup_name (n-1) DataName - -unboxedTupleTypeName 0 = error "unboxedTupleTypeName 0" -unboxedTupleTypeName 1 = error "unboxedTupleTypeName 1" -unboxedTupleTypeName n = mk_unboxed_tup_name (n-1) TcClsName +unboxedTupleDataName n = mk_unboxed_tup_name n DataName +unboxedTupleTypeName n = mk_unboxed_tup_name n TcClsName mk_unboxed_tup_name :: Int -> NameSpace -> Name -mk_unboxed_tup_name n_commas space - = Name occ (NameG space (mkPkgName "ghc-prim") tup_mod) +mk_unboxed_tup_name n space + = Name (mkOccName tup_occ) (NameG space (mkPkgName "ghc-prim") tup_mod) where - occ = mkOccName ("(#" ++ replicate n_commas ',' ++ "#)") - tup_mod = mkModName "GHC.Tuple" + tup_occ | n == 1 = "Unit#" -- See Note [One-tuples] in TysWiredIn + | otherwise = "(#" ++ replicate n_commas ',' ++ "#)" + n_commas = n - 1 + tup_mod = mkModName "GHC.Tuple" ----------------------------------------------------- -- Locations diff --git a/libraries/template-haskell/changelog.md b/libraries/template-haskell/changelog.md index c4b8f034cf..1f41a6a528 100644 --- a/libraries/template-haskell/changelog.md +++ b/libraries/template-haskell/changelog.md @@ -16,6 +16,9 @@ * Add support for attaching deriving strategies to `deriving` statements (#10598) + * `unboxedTupleTypeName` and `unboxedTupleDataName` now work for unboxed + 0-tuples and 1-tuples (#12977) + ## 2.11.0.0 *May 2016* * Bundled with GHC 8.0.1 |