
On Wed, Jan 18, 2012 at 02:27:21PM +0000, Simon Peyton-Jones wrote:
Dear GHC users
As part of beefing up the kind system, we plan to implement the "Type operators" proposal for Haskell Prime http://hackage.haskell.org/trac/haskell-prime/wiki/InfixTypeConstructors
GHC has had type operators for some kind, so you can say data a :+: b = Left a | Right b but you can only do that for operators which start with ":".
As part of the above wiki page you can see the proposal to broaden this to ALL operators, allowing data a + b = Left a | Right b
Although this technically inconsistent the value page (as the wiki page discussed), I think the payoff is huge. (And "A foolish consistency is the hobgoblin of little minds", Emerson)
This email is (a) to highlight the plan, and (b) to ask about flags. Our preferred approach is to *change* what -XTypeOperators does, to allow type operators that do not start with :. But that will mean that *some* (strange) programs will stop working. The only example I have seen in tc192 of GHC's test suite
This is not actually that strange. Lots of code that works with arrows uses type variables like (~>) or similar, and to have to change to (b `arr` c) instead of (b ~> c) would be annoying. For example, check out the 'netwire' package: http://hackage.haskell.org/packages/archive/netwire/3.1.0/doc/html/Control-W... I'm not sure at this point which way I would lean on the issue. Having infix type constructors that don't have to start with : is something I would like, too. But I just thought I would point out that code like tc192 is not as esoteric as you seem to think. I do agree, however, that letting things like (~>) be EITHER type constructors OR type variables depending on what is in scope is out of the question: it's non-compositional and makes the parser's job quite difficult. -Brent