summaryrefslogtreecommitdiff
path: root/compiler/GHC/Hs/Expr.hs
diff options
context:
space:
mode:
authorRyan Scott <ryan.gl.scott@gmail.com>2019-10-24 13:52:36 -0400
committerMarge Bot <ben+marge-bot@smart-cactus.org>2019-11-07 08:39:36 -0500
commit708c60aa144ed68a5b67a61f16539258dbcdb24e (patch)
tree1c73dfe7395871f7986eb12701d19b46825f3f39 /compiler/GHC/Hs/Expr.hs
parentb4fb232892ec420059e767bbf464bd09361aaefa (diff)
downloadhaskell-708c60aa144ed68a5b67a61f16539258dbcdb24e.tar.gz
Clean up TH's treatment of unary tuples (or, #16881 part two)
!1906 left some loose ends in regards to Template Haskell's treatment of unary tuples. This patch ends to tie up those loose ends: * In addition to having `TupleT 1` produce unary tuples, `TupE [exp]` and `TupP [pat]` also now produce unary tuples. * I have added various special cases in GHC's pretty-printers to ensure that explicit 1-tuples are printed using the `Unit` type. See `testsuite/tests/th/T17380`. * The GHC 8.10.1 release notes entry has been tidied up a little. Fixes #16881. Fixes #17371. Fixes #17380.
Diffstat (limited to 'compiler/GHC/Hs/Expr.hs')
-rw-r--r--compiler/GHC/Hs/Expr.hs8
1 files changed, 8 insertions, 0 deletions
diff --git a/compiler/GHC/Hs/Expr.hs b/compiler/GHC/Hs/Expr.hs
index 7a9caa8c6e..847ecd1743 100644
--- a/compiler/GHC/Hs/Expr.hs
+++ b/compiler/GHC/Hs/Expr.hs
@@ -13,6 +13,7 @@
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE ViewPatterns #-}
-- | Abstract Haskell syntax for expressions.
module GHC.Hs.Expr where
@@ -43,6 +44,7 @@ import Util
import Outputable
import FastString
import Type
+import TysWiredIn (mkTupleStr)
import TcType (TcType)
import {-# SOURCE #-} TcRnTypes (TcLclEnv)
@@ -908,6 +910,12 @@ ppr_expr (SectionR _ op expr)
pp_infixly v = sep [v, pp_expr]
ppr_expr (ExplicitTuple _ exprs boxity)
+ -- Special-case unary boxed tuples so that they are pretty-printed as
+ -- `Unit x`, not `(x)`
+ | [dL -> L _ (Present _ expr)] <- exprs
+ , Boxed <- boxity
+ = hsep [text (mkTupleStr Boxed 1), ppr expr]
+ | otherwise
= tupleParens (boxityTupleSort boxity) (fcat (ppr_tup_args $ map unLoc exprs))
where
ppr_tup_args [] = []