[GHC] #10707: -fth-dec-file outputs invalid case clauses

GHC ghc-devs at haskell.org
Thu Jan 28 09:40:58 UTC 2016


#10707: -fth-dec-file outputs invalid case clauses
-------------------------------------+-------------------------------------
        Reporter:  Fabian            |                Owner:
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Template Haskell  |              Version:  7.10.1
      Resolution:                    |             Keywords:  newcomer
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  Other             |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:  #10701            |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by bollmann):

 Replying to [comment:4 Fabian]:
 > Replying to [comment:3 rwbarton]:
 > > I'm not sure what you mean by "invalid case clauses", but it seems to
 me that the error is that
 > > {{{
 > > case e of { ...alts... } foo
 > > }}}
 > > is not valid syntax for an application, it must be parenthesized like
 > > {{{
 > > (case e of { ...alts... }) foo
 > > }}}
 > > A problem with the case expression itself in its context, not the case
 clauses.
 >
 > I wasn't sure exactly what was wrong with the output

 According to Fabian's specified AST (see the attached Test.hs), the
 problem rather seems to be missing parentheses around the lambda
 abstraction as well as missing semi-colons to separate the cases. That is,
 instead of pretty-printing

 {{{
 instance Data.Aeson.Types.Class.ToJSON Language.Haskell.TH.Syntax.Name
 where
   Data.Aeson.Types.Class.toJSON x
     = \ k_a94l v_a94m
         -> case k_a94l of {
              GHC.Base.Just "" -> GHC.Err.undefined
              GHC.Base.Nothing -> GHC.Err.undefined }
         (GHC.Base.Just "test") "test2"
 }}}

 the code should be pretty-printed as:

 {{{
 instance Data.Aeson.Types.Class.ToJSON Language.Haskell.TH.Syntax.Name
 where
   Data.Aeson.Types.Class.toJSON x
     = (\ k_a94l v_a94m
         -> case k_a94l of {
              GHC.Base.Just "" -> GHC.Err.undefined;   -- note the ';' here
              GHC.Base.Nothing -> GHC.Err.undefined }) -- note the
 parentheses
         (GHC.Base.Just "test") "test2"
 }}}

 That should be easy to fix. I'll have a look.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10707#comment:7>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list