
#7627: Space in nullary unboxed tuples ---------------------------------+------------------------------------------ Reporter: monoidal | Owner: Type: bug | Status: patch Priority: normal | Milestone: Component: Compiler | Version: 7.6.1 Keywords: | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: None/Unknown Difficulty: Unknown | Testcase: Blockedby: | Blocking: Related: | ---------------------------------+------------------------------------------ Changes (by simonpj): * difficulty: => Unknown Comment: I agree that this is a tiresome issue, but I'm not convinced that adding spaces is the right way to go. What is the name of the type constructor? Presumably "`(##)`". We don't have ANY type constructors that have spaces in the middle of their names. An alternative is to permit "`(##)`" to parse as a type and a term, just as `()` does. The only reason it does not at the moment is becuase if you had an operator "`##`", then "`(##)`" would usually be the parenthesised version of it. The lexer has a special check: {{{ <0> { "(#" / { ifExtension unboxedTuplesEnabled `alexAndPred` notFollowedBySymbol } { token IToubxparen } "#)" / { ifExtension unboxedTuplesEnabled } { token ITcubxparen } } }}} Notice that `notFollowedBySymbol` thing. That's what stops "`(##)`" lexing as "`(#`" followed by "`#)`". I think. So we could just back off this and say that if you have `-XUboxedTuples` then "`(##)`" means a unit unboxed tuple, not the operator "`##`". I think that'd be better. What about "`(#-)`"? Maybe that should parse as the parenthesised operator "`#-`". So the lexer would essentialy have to recognise "`(##)`" and do the right thing (two lexemes). Simon M, or anyone else, any opinions? Simon -- Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/7627#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler