On Tue, 24 Jun 2014, Simon Peyton Jones wrote:

In the latter case, what happened to the shift/reduce and reduce/reduce errors reported by Happy? Esp the latter. If you are getting more you need to track them down.

I think I've figured out what might be causing the problem.

First, a couple figures. With these rules:

pattern_synonym_decl
        : 'pattern' con vars0 patsyn_token pat
        | 'pattern' varid conop varid patsyn_token pat

pattern_synonym_sig
        : 'pattern' patsyn_stuff '::' ctype

patsyn_stuff
        : constr_stuff

I'm getting 112 new reduce/reduce conflicts.

If I add the context like you recommended:

pattern_synonym_sig
        : 'pattern' patsyn_context patsyn_stuff '::' ctype

patsyn_context :: { LHsContext RdrName }
        : forall
        | forall context '=>'


then I get 54 new shift/reduce conflicts and no (new) reduce/reduce conflicts.

My feeling is the problem is that patterns don't need any special parentheses around type annotations, which means the following is a legal pattern synonym definition:

pattern Single x = [x] :: [Int]

and I think that the difference (the '=' or '<-') is too 'deep' between this and something like

pattern Single a :: [a]

Unfortunately, I still have no idea how to solve this problem...
_______________________________________________
ghc-devs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/ghc-devs

Reply via email to