
On Sat, Feb 11, 2012 at 4:07 PM, Doug McIlroy
For example, this code fragment to define addition on lists is instantly intelligible.
instance Num a => Num [a] where (f:fs) + (g:gs) = f+g : fs+gs
But the formula becomes merely an obscure procession of symbols when rewritten with the operators set off by spaces:
( fs : gs ) + ( g : gs ) = f + g : fs + gs
I wouldn't require them inside parentheses, but that's a very good point: the list constructor in patterns is an example of an operator where basically no one ever uses spaces.
And it becomes too long and too subtly modulated to take in at a glance if more spacing is added to emphasize precedence:
( f : fs ) + ( g : gs ) = f + g : fs + gs
I would rather write (f + g) : (fs + gs), but point taken. In any case, while I would in theory support spaces around all operators, modulo counterexamples such as those presented above, I'm not proposing it and I don't think anyone is, so it's probably best to stick to discussing spaces around (.) (which I also support). Apologies for taking the discussion off topic.