
#2530: deriving Show adds extra parens for constructor with record syntax -------------------------------------+------------------------------------- Reporter: spl | Owner: bgamari Type: bug | Status: patch Priority: highest | Milestone: 8.0.1 Component: Compiler | Version: 6.8.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D669, Wiki Page: | Phab:D2027 -------------------------------------+------------------------------------- Changes (by bgamari): * status: new => patch * differential: Phab:D669 => Phab:D669, Phab:D2027 @@ -6,1 +6,1 @@ - {{{ + {{{#!hs New description: Since record construction binds more tightly than function application, no parentheses are needed when passing a constructor with record syntax to a function constructor. As a result, we can pass {{{Just A {x = 5}}}} as shown below. {{{#!hs module Main where data A = A {x :: Int} deriving (Show) main :: IO () main = print $ Just A {x = 5} }}} But we get the result in the GHCi session below: {{{ *Main> main Just (A {x = 5}) }}} I tried looking through {{{TcGenDeriv}}}, but didn't figure out quite where the parenifying was done. {{{nested_compose_Expr}}}? {{{show_thingies}}}? I just wanted to make a ticket for general knowledge. Of course, this is not a real bug. Perhaps you could reclassify it as a feature. Either way, it would be nice to have. -- Comment: Phab:D2027 reverts to the previous behavior including redundant parens as described in comment:36. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/2530#comment:38 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler