#6038: Allow view patterns inside record patterns
---------------------------------+------------------------------------------
    Reporter:  akio              |       Owner:                  
        Type:  feature request   |      Status:  new             
    Priority:  normal            |   Milestone:  _|_             
   Component:  Compiler          |     Version:  7.4.1           
    Keywords:                    |          Os:  Unknown/Multiple
Architecture:  Unknown/Multiple  |     Failure:  None/Unknown    
  Difficulty:  Unknown           |    Testcase:                  
   Blockedby:                    |    Blocking:                  
     Related:                    |  
---------------------------------+------------------------------------------
Changes (by simonpj):

  * difficulty:  => Unknown
  * milestone:  => _|_


Comment:

 I agree that would be nice.  At the moment view patterns must have parens
 around them, and for a good reason. Consider a case with a view pattern:
 {{{
    case c of
       (ch -> Just y) -> y
 }}}
 Now imagine it without parens
 {{{
    case c of
       ch -> Just y -> y}}}
 }}}
 and you can see that you'd need a lot of lookahead to spot where the
 pattern ends.

 There's probably a way to work this out (require parens just for view
 patterns in a case or lambda pattern, somehow?).  If anyone would like to,
 please go ahead and propose (and test!) a patch to the parser.

 Thinking it might be easy, I tried the diff below, but it doesn't work for
 the above reason.  So I'm backing off.

 {{{
 diff --git a/compiler/parser/Parser.y.pp b/compiler/parser/Parser.y.pp
 index 04c858a..7da62f7 100644
 --- a/compiler/parser/Parser.y.pp
 +++ b/compiler/parser/Parser.y.pp
 @@ -1376,6 +1376,7 @@ exp   :: { LHsExpr RdrName }
          | infixexp '>-' exp             { LL $ HsArrApp $3 $1
 placeHolderType HsFirstOrderApp False }
          | infixexp '-<<' exp            { LL $ HsArrApp $1 $3
 placeHolderType HsHigherOrderApp True }
          | infixexp '>>-' exp            { LL $ HsArrApp $3 $1
 placeHolderType HsHigherOrderApp False}
 +        | infixexp '->' exp             { LL $ EViewPat $1 $3 }
          | infixexp                      { $1 }

  infixexp :: { LHsExpr RdrName }
 @@ -1534,7 +1535,7 @@ texp :: { LHsExpr RdrName }
          | qopm infixexp       { LL $ SectionR $1 $2 }

         -- View patterns get parenthesized above
 -        | exp '->' texp   { LL $ EViewPat $1 $3 }
 +--        | exp '->' texp   { LL $ EViewPat $1 $3 }
 }}}

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

_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to