diff options
author | Elton <eltonp3103@gmail.com> | 2022-01-16 13:28:03 -0500 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2022-02-01 12:28:49 -0500 |
commit | fdda93b03e9be56122dd8445e7ee0f1d0f933a19 (patch) | |
tree | 40ce0148efd213a9c5bb5cf64ed86cc8eba4e03c | |
parent | 60ac73002fc6fb717f1838a2bb3cee6535ff77c9 (diff) | |
download | haskell-fdda93b03e9be56122dd8445e7ee0f1d0f933a19.tar.gz |
Use braces in TH LambdaCase and where clauses
This patch ensures that the pretty printer formats LambdaCase and where
clauses using braces (instead of layout) to remain consistent with the
formatting of other statements (like `do` and `case`)
-rw-r--r-- | libraries/template-haskell/Language/Haskell/TH/Ppr.hs | 16 | ||||
-rw-r--r-- | testsuite/tests/quotes/T20893.hs | 22 | ||||
-rw-r--r-- | testsuite/tests/quotes/T20893.stdout | 11 | ||||
-rw-r--r-- | testsuite/tests/quotes/TH_ppr1.stdout | 2 | ||||
-rw-r--r-- | testsuite/tests/th/T10891.stderr | 10 | ||||
-rw-r--r-- | testsuite/tests/th/T11797.stderr | 2 | ||||
-rw-r--r-- | testsuite/tests/th/T14888.stderr | 4 | ||||
-rw-r--r-- | testsuite/tests/th/T4135.stderr | 2 | ||||
-rw-r--r-- | testsuite/tests/th/T7064.stdout | 4 | ||||
-rw-r--r-- | testsuite/tests/th/T9064.stderr | 4 | ||||
-rw-r--r-- | testsuite/tests/th/TH_reifyDecl1.stderr | 8 | ||||
-rw-r--r-- | testsuite/tests/th/TH_reifyExplicitForAllFams.stderr | 2 | ||||
-rw-r--r-- | testsuite/tests/th/TH_repUnboxedTuples.stderr | 6 |
13 files changed, 67 insertions, 26 deletions
diff --git a/libraries/template-haskell/Language/Haskell/TH/Ppr.hs b/libraries/template-haskell/Language/Haskell/TH/Ppr.hs index 42d32487c8..d9ae558c15 100644 --- a/libraries/template-haskell/Language/Haskell/TH/Ppr.hs +++ b/libraries/template-haskell/Language/Haskell/TH/Ppr.hs @@ -155,7 +155,7 @@ pprExp i (LamE [] e) = pprExp i e -- #13856 pprExp i (LamE ps e) = parensIf (i > noPrec) $ char '\\' <> hsep (map (pprPat appPrec) ps) <+> text "->" <+> ppr e pprExp i (LamCaseE ms) = parensIf (i > noPrec) - $ text "\\case" $$ nest nestDepth (ppr ms) + $ text "\\case" $$ braces (semiSep ms) pprExp i (TupE es) | [Just e] <- es = pprExp i (ConE (tupleDataName 1) `AppE` e) @@ -938,7 +938,7 @@ instance Ppr Range where ------------------------------ where_clause :: [Dec] -> Doc where_clause [] = empty -where_clause ds = nest nestDepth $ text "where" <+> vcat (map (ppr_dec False) ds) +where_clause ds = nest nestDepth $ text "where" <+> braces (semiSepWith (ppr_dec False) ds) showtextl :: Show a => a -> Doc showtextl = text . map toLower . show @@ -960,6 +960,11 @@ instance Ppr Loc where , text "-" , parens $ int end_ln <> comma <> int end_col ] +-- Takes a separator and a pretty-printing function and prints a list of things +-- separated by the separator followed by space. +sepWith :: Doc -> (a -> Doc) -> [a] -> Doc +sepWith sepDoc pprFun = sep . punctuate sepDoc . map pprFun + -- Takes a list of printable things and prints them separated by commas followed -- by space. commaSep :: Ppr a => [a] -> Doc @@ -968,13 +973,18 @@ commaSep = commaSepWith ppr -- Takes a list of things and prints them with the given pretty-printing -- function, separated by commas followed by space. commaSepWith :: (a -> Doc) -> [a] -> Doc -commaSepWith pprFun = sep . punctuate comma . map pprFun +commaSepWith pprFun = sepWith comma pprFun -- Takes a list of printable things and prints them separated by semicolons -- followed by space. semiSep :: Ppr a => [a] -> Doc semiSep = sep . punctuate semi . map ppr +-- Takes a list of things and prints them with the given pretty-printing +-- function, separated by semicolons followed by space. +semiSepWith :: (a -> Doc) -> [a] -> Doc +semiSepWith pprFun = sepWith semi pprFun + -- Prints out the series of vertical bars that wraps an expression or pattern -- used in an unboxed sum. unboxedSumBars :: Doc -> SumAlt -> SumArity -> Doc diff --git a/testsuite/tests/quotes/T20893.hs b/testsuite/tests/quotes/T20893.hs index 90f1efb331..079a23166c 100644 --- a/testsuite/tests/quotes/T20893.hs +++ b/testsuite/tests/quotes/T20893.hs @@ -1,5 +1,7 @@ -- #20893 +{-# LANGUAGE LambdaCase #-} + module Main where import Language.Haskell.TH @@ -8,6 +10,8 @@ import Language.Haskell.TH.Ppr main = do runQ t1 >>= p runQ t2 >>= p + runQ t3 >>= p + runQ t4 >>= p t1 = [d| main = do { case 0 of { 0 -> 1 }; putStrLn "pass" } |] @@ -26,4 +30,22 @@ t2 = [d| putStrLn (show day) ++ " is " (show num) |] +t3 = [d| + main = do + let color = "red" + let id = 1 + print_color (color, id) + where print_color (c, i) = putStrLn (c ++ " is " ++ (show i)) + |] + +t4 = [d| + main = do + let colors = ["red", "green", "blue"] + let ids = map (\case + "red" -> 0 + "green" -> 1 + "blue" -> 2) colors + putStrLn (show ids) + |] + p = putStrLn . pprint diff --git a/testsuite/tests/quotes/T20893.stdout b/testsuite/tests/quotes/T20893.stdout index c08abdd03d..222f0f8d49 100644 --- a/testsuite/tests/quotes/T20893.stdout +++ b/testsuite/tests/quotes/T20893.stdout @@ -11,4 +11,13 @@ main_0 = do {let {day_1 = "mon"}; "sat" -> 6; "sun" -> 7; _ -> 8}}; - System.IO.putStrLn (GHC.Show.show day_1) GHC.Base.++ " is " (GHC.Show.show num_2)}
\ No newline at end of file + System.IO.putStrLn (GHC.Show.show day_1) GHC.Base.++ " is " (GHC.Show.show num_2)} +main_0 = do {let {color_1 = "red"}; + let {id_2 = 1}; + print_color_3 (color_1, id_2)} + where {print_color_3 (c_4, + i_5) = System.IO.putStrLn (c_4 GHC.Base.++ (" is " GHC.Base.++ GHC.Show.show i_5))} +main_0 = do {let {colors_1 = ["red", "green", "blue"]}; + let {ids_2 = GHC.Base.map (\case + {"red" -> 0; "green" -> 1; "blue" -> 2}) colors_1}; + System.IO.putStrLn (GHC.Show.show ids_2)} diff --git a/testsuite/tests/quotes/TH_ppr1.stdout b/testsuite/tests/quotes/TH_ppr1.stdout index 6c18e3fa2b..f6b89ec83e 100644 --- a/testsuite/tests/quotes/TH_ppr1.stdout +++ b/testsuite/tests/quotes/TH_ppr1.stdout @@ -7,7 +7,7 @@ Main.u1 GHC.Types.: Main.u2 \((GHC.Types.:) x_0 xs_1) -> x_0 \(x_0 GHC.Types.: xs_1) -> x_0 class Foo_0 a_1 b_2 - where foo_3 :: a_1 -> b_2 + where {foo_3 :: a_1 -> b_2} \x_0 -> (x_0, 1 `x_0` 2) \(+_0) -> ((+_0), 1 +_0 2) (Main.f, 1 `Main.f` 2) diff --git a/testsuite/tests/th/T10891.stderr b/testsuite/tests/th/T10891.stderr index 6b382e61d9..a73b663f6f 100644 --- a/testsuite/tests/th/T10891.stderr +++ b/testsuite/tests/th/T10891.stderr @@ -1,10 +1,10 @@ class T10891.C (a_0 :: *) - where T10891.f :: a_0 -> GHC.Types.Int + where {T10891.f :: a_0 -> GHC.Types.Int} class T10891.C' (a_0 :: *) - where type T10891.F (a_0 :: *) :: * - type T10891.F a_0 = a_0 - T10891.f' :: a_0 -> GHC.Types.Int + where {type T10891.F (a_0 :: *) :: *; + type T10891.F a_0 = a_0; + T10891.f' :: a_0 -> GHC.Types.Int} instance T10891.C' GHC.Types.Int class T10891.C'' (a_0 :: *) - where data T10891.Fd (a_0 :: *) :: * + where {data T10891.Fd (a_0 :: *) :: *} instance T10891.C'' GHC.Types.Int diff --git a/testsuite/tests/th/T11797.stderr b/testsuite/tests/th/T11797.stderr index b978e63aff..c46f61d852 100644 --- a/testsuite/tests/th/T11797.stderr +++ b/testsuite/tests/th/T11797.stderr @@ -1,2 +1,2 @@ class Foo_0 a_1 - where meth_2 :: a_1 -> b_3 -> a_1 + where {meth_2 :: a_1 -> b_3 -> a_1} diff --git a/testsuite/tests/th/T14888.stderr b/testsuite/tests/th/T14888.stderr index f58d0c8b45..fe77220edc 100644 --- a/testsuite/tests/th/T14888.stderr +++ b/testsuite/tests/th/T14888.stderr @@ -5,6 +5,6 @@ T14888.hs:18:22-60: Splicing expression reify ''Functor' >>= stringE . pprint ======> "class T14888.Functor' (f_0 :: * -> *) - where T14888.fmap' :: forall (a_1 :: *) (b_2 :: *) . - (a_1 -> b_2) -> f_0 a_1 -> f_0 b_2 + where {T14888.fmap' :: forall (a_1 :: *) (b_2 :: *) . + (a_1 -> b_2) -> f_0 a_1 -> f_0 b_2} instance T14888.Functor' ((->) r_3)" diff --git a/testsuite/tests/th/T4135.stderr b/testsuite/tests/th/T4135.stderr index 3a4c6084d4..a8cdcd8965 100644 --- a/testsuite/tests/th/T4135.stderr +++ b/testsuite/tests/th/T4135.stderr @@ -1,2 +1,2 @@ instance Bug.C (GHC.Maybe.Maybe a_0) - where type Bug.T (GHC.Maybe.Maybe a_0) = GHC.Types.Char + where {type Bug.T (GHC.Maybe.Maybe a_0) = GHC.Types.Char} diff --git a/testsuite/tests/th/T7064.stdout b/testsuite/tests/th/T7064.stdout index d9790f79e9..b5f8c47103 100644 --- a/testsuite/tests/th/T7064.stdout +++ b/testsuite/tests/th/T7064.stdout @@ -13,8 +13,8 @@ g3_0 x_1 = 3 GHC.Types.Int -> GHC.Types.Int #-} data T_0 a_1 = T_2 a_1 instance GHC.Classes.Eq a_0 => GHC.Classes.Eq (T_1 a_0) - where {-# SPECIALISE instance GHC.Classes.Eq (T_1 GHC.Types.Int) #-} - (GHC.Classes.==) (T_2 x_3) (T_2 y_4) = x_3 GHC.Classes.== y_4 + where {{-# SPECIALISE instance GHC.Classes.Eq (T_1 GHC.Types.Int) #-}; + (GHC.Classes.==) (T_2 x_3) (T_2 y_4) = x_3 GHC.Classes.== y_4} {-# RULES "rule1" GHC.Real.fromIntegral = GHC.Base.id :: a_0 -> a_0 #-} diff --git a/testsuite/tests/th/T9064.stderr b/testsuite/tests/th/T9064.stderr index c7f3df187c..1e027d35bf 100644 --- a/testsuite/tests/th/T9064.stderr +++ b/testsuite/tests/th/T9064.stderr @@ -1,4 +1,4 @@ class T9064.C (a_0 :: *) - where T9064.foo :: a_0 -> GHC.Base.String - default T9064.foo :: GHC.Show.Show a_0 => a_0 -> GHC.Base.String + where {T9064.foo :: a_0 -> GHC.Base.String; + default T9064.foo :: GHC.Show.Show a_0 => a_0 -> GHC.Base.String} instance T9064.C T9064.Bar diff --git a/testsuite/tests/th/TH_reifyDecl1.stderr b/testsuite/tests/th/TH_reifyDecl1.stderr index 1984d85075..c9b295ec83 100644 --- a/testsuite/tests/th/TH_reifyDecl1.stderr +++ b/testsuite/tests/th/TH_reifyDecl1.stderr @@ -14,13 +14,13 @@ Constructor from TH_reifyDecl1.Tree: TH_reifyDecl1.Leaf :: forall {k_0 :: *} (a_ Class op from TH_reifyDecl1.C1: TH_reifyDecl1.m1 :: forall (a_0 :: *) . TH_reifyDecl1.C1 a_0 => a_0 -> GHC.Types.Int class TH_reifyDecl1.C1 (a_0 :: *) - where TH_reifyDecl1.m1 :: a_0 -> GHC.Types.Int + where {TH_reifyDecl1.m1 :: a_0 -> GHC.Types.Int} class TH_reifyDecl1.C2 (a_0 :: *) - where TH_reifyDecl1.m2 :: a_0 -> GHC.Types.Int + where {TH_reifyDecl1.m2 :: a_0 -> GHC.Types.Int} instance TH_reifyDecl1.C2 GHC.Types.Int class TH_reifyDecl1.C3 (a_0 :: k_1) - where type TH_reifyDecl1.AT1 (a_0 :: k_1) :: * - data TH_reifyDecl1.AT2 (a_0 :: k_1) :: * + where {type TH_reifyDecl1.AT1 (a_0 :: k_1) :: *; + data TH_reifyDecl1.AT2 (a_0 :: k_1) :: *} instance TH_reifyDecl1.C3 GHC.Types.Int type family TH_reifyDecl1.AT1 (a_0 :: k_1) :: * type instance TH_reifyDecl1.AT1 GHC.Types.Int = GHC.Types.Bool diff --git a/testsuite/tests/th/TH_reifyExplicitForAllFams.stderr b/testsuite/tests/th/TH_reifyExplicitForAllFams.stderr index 673f09e2e0..be0bf5ad86 100644 --- a/testsuite/tests/th/TH_reifyExplicitForAllFams.stderr +++ b/testsuite/tests/th/TH_reifyExplicitForAllFams.stderr @@ -2,7 +2,7 @@ data family TH_reifyExplicitForAllFams.F (a_0 :: *) :: * data instance forall (a_1 :: *). TH_reifyExplicitForAllFams.F (GHC.Maybe.Maybe a_1) = TH_reifyExplicitForAllFams.MkF a_1 class TH_reifyExplicitForAllFams.C (a_0 :: *) - where type TH_reifyExplicitForAllFams.G (a_0 :: *) (b_1 :: *) :: * + where {type TH_reifyExplicitForAllFams.G (a_0 :: *) (b_1 :: *) :: *} instance TH_reifyExplicitForAllFams.C ([a_2]) type family TH_reifyExplicitForAllFams.G (a_0 :: *) (b_1 :: *) :: * type instance forall (a_2 :: *) diff --git a/testsuite/tests/th/TH_repUnboxedTuples.stderr b/testsuite/tests/th/TH_repUnboxedTuples.stderr index b8bedac854..1d58620d34 100644 --- a/testsuite/tests/th/TH_repUnboxedTuples.stderr +++ b/testsuite/tests/th/TH_repUnboxedTuples.stderr @@ -1,5 +1,5 @@ CaseE (UnboxedTupE [Just (LitE (CharL 'b')),Just (ConE GHC.Types.False)]) [Match (UnboxedTupP [LitP (CharL 'a'),ConP GHC.Types.True [] []]) (NormalB (UnboxedTupE [Just (LitE (StringL "One")),Just (LitE (IntegerL 1))])) [],Match (UnboxedTupP [LitP (CharL 'b'),ConP GHC.Types.False [] []]) (NormalB (UnboxedTupE [Just (LitE (StringL "Two")),Just (LitE (IntegerL 2))])) [],Match (UnboxedTupP [WildP,WildP]) (NormalB (UnboxedTupE [Just (LitE (StringL "Three")),Just (LitE (IntegerL 3))])) []] case (# 'b', GHC.Types.False #) of - (# 'a', GHC.Types.True #) -> (# "One", 1 #) - (# 'b', GHC.Types.False #) -> (# "Two", 2 #) - (# _, _ #) -> (# "Three", 3 #) +{(# 'a', GHC.Types.True #) -> (# "One", 1 #); + (# 'b', GHC.Types.False #) -> (# "Two", 2 #); + (# _, _ #) -> (# "Three", 3 #)} |