
#11432: Cannot export operator newtype -------------------------------------+------------------------------------- Reporter: phadej | Owner: Type: bug | Status: new Priority: highest | Milestone: 8.0.1 Component: Compiler | Version: 8.0.1-rc1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by skvadrik): I see two possible ways to resolve this issue. * The first way is to change GHC grammar (as shown in attached Parser.diff) to distinguish between `(-.->)` and `(-.->)(..)` in export lists: the first construct must be recognized as variable constructor, while the second must be type constructor (because it has `(..)`). With this patch GHC can parse the reported program (and passes all existing tests). Note that the patch does not add any new conflicts. However, it is ugly: one has to lift low-level nonterminals (variable and type names) all the way up to export lists: parser cannot decide whether it is variable or type name until it sees subexport. * The second way (I have no example patch yet) would be to free grammar of all this mess: parse any constructor in export list as just some constructor (probably with subexport) and decide which kind it is later. So you see, this patch is kind of a demonstration that LALR grammars are capable of parsing such things. I'm not happy with this solution; I'd rather try the second way. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11432#comment:11 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler