<div dir="ltr">Hello,<div><br></div><div>I am not convinced by the argument that this will help make 'diffs' considerably simpler: we have tools for visualizing diffs, and saving an extra line at the beginning/end of a long enumeration seems like an unlikely source of confusion or serious merge conflicts.</div><div><br></div><div>By the way, leading/trailing separators conflict with the syntax for tuple sections:</div><div><br></div><div><div>(True,) :: t -> (Bool, t)</div></div><div><div>(,True) :: t -> (t, Bool)</div></div><div><br></div><div>I think that it wold be quite odd if leading/trailing commas meant one thing in tuples and something completely different in lists.</div><div><br></div><div>-Iavor</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 6, 2016 at 6:09 AM, Alexander Berntsen <span dir="ltr"><<a href="mailto:alexander@plaimi.net" target="_blank">alexander@plaimi.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">-----BEGIN PGP SIGNED MESSAGE-----<br>
Hash: SHA512<br>
<br>
Haskell uses separators for values in a number of syntactic<br>
constructs. It is my understanding of the 2010 report that the<br>
language does however not generally support leading separators, nor<br>
trailing separators, nor both (two exceptions are discussed at the end<br>
of this email). Consequently diffs are bloated, resulting in mental<br>
overhead when viewing and reviewing patches, as well as potential<br>
three-way merge conflicts or worse. A quick example:<br>
<br>
[ Foo<br>
, Bar<br>
, Fu<br>
, Baz<br>
]<br>
<br>
It is impossible to remove values Foo or Baz with a one line diff. It<br>
is additionally impossible to reasonably add a new value to the top or<br>
bottom of the list.<br>
<br>
I want the Haskell' committee to discuss allowing one or more of the<br>
following:<br>
<br>
* Leading separators<br>
* Trailing separators<br>
* No separators<br>
<br>
The former two, or a combination, is arguably the least invasive<br>
modification, whilst the latter is more sensible as a language<br>
extension for now as it would break code. The latter is furthermore<br>
difficult as the rules are potentially more involved, yielding more<br>
gotchas. My immediate suggestion for the no separators route would be<br>
to use newlines.<br>
<br>
The discussion should apply to as many contexts as deemed sensible. It<br>
is arguably insensible to introduce leading or trailing separators<br>
where we would end up with ambiguity, as would be the case with tuple<br>
declarations due to tuple sections. Examples of where it would be<br>
sensible are abundant, and include -- but aren't limited to -- data<br>
types, lists, record fields, pattern guards, and language pragmas.<br>
<br>
If leading separators, or trailing separators, or both, are accepted<br>
as the way to go forward, perhaps permit extra separators in general.<br>
I.e. [,,,Foo,,,Bar,,,Fu,,,Baz,,,] is a list with four terms, Foo, Bar,<br>
Fu, and Baz.<br>
<br>
<br>
Please note that Haskell 2010 already permits trailing commas in<br>
import and export lists, like so:<br>
<br>
impspec → ( import1 , … , importn [ , ] ) (n ≥ 0)<br>
exports → ( export1 , … , exportn [ , ] ) (n ≥ 0)<br>
<br>
Meaning the following is legal:<br>
<br>
import Foo (<br>
  Fu,<br>
  Baz,<br>
)<br>
<br>
And the following:<br>
<br>
module Foo (<br>
  Fu,<br>
  Baz,<br>
)<br>
<br>
Bizarrely, the following is *not* legal:<br>
<br>
import Foo (<br>
  Bar (<br>
    Fu,<br>
    Baz,<br>
  )<br>
)<br>
<br>
I.e. impspecs are permitted trailing commas, imports aren't.<br>
- --<br>
Alexander<br>
<a href="mailto:alexander@plaimi.net">alexander@plaimi.net</a><br>
<a href="https://secure.plaimi.net/~alexander" rel="noreferrer" target="_blank">https://secure.plaimi.net/~alexander</a><br>
-----BEGIN PGP SIGNATURE-----<br>
Version: GnuPG v2<br>
<br>
iQIcBAEBCgAGBQJXLJekAAoJENQqWdRUGk8BksEQANHIhsGRaoDuwb6CM3NapElv<br>
XfcSgW5//Vva0/8f//BXUvN2rrfadxcjzr4xKL8CKME9sxlgRJ56RQi+Ai/L0mNZ<br>
h1x0Uqi3dmDzMxF1ROgKlUMjU4CAGqq5MMl3iZTC4vP7NpMUrqodZe7zO9INnP/7<br>
av0x9GPI1SnXc1xocSMew9VA1fzd1tr8e+M73tex1yNC1pr5vI5hKSliofwTBHhW<br>
BAIKVOu3hEBUjhziZkmSPqOZJ4QCJYsMQ6P6ZCnxs7K2vplA3OQC+jOO/vM6MqdZ<br>
iaRrYiqyof3XkeNr7/Z96+6/iKdGIGn4+OsOzrWUMdsJfY/kftb7KJR/tRgfWug9<br>
QMlMjmTfxDkCAlonU2uNwSustcMTJNhq6g4Ymg6k5t7MwojT6dDE0ASAUlOKGbCk<br>
WRvDVLRGaQcn7HF4PWq7RnrP+lvl9OUZr36L4QZrG8ei5v2DN/H30hlT0zzbyp97<br>
yO9yHQZ0TmCt+iAbDi822vRlmfJEH7zRkrsmcHAmiOAsAfvZoaqtSiLK2eiczb1g<br>
V7h1h1ze3i0I+MNf7+Sbzot3kJwW8+3XqZoh2B1oyWgiDlrZhLDDHaEY4yzoPG3E<br>
hdmAOoYx43tnd6LkWhar86CwoxelyKvpXoLNp6JZe+mUAG4qwoa8AIcXglk4KTty<br>
k0M1NEwiPSy+/ymABx/T<br>
=E+MY<br>
-----END PGP SIGNATURE-----<br>
_______________________________________________<br>
Haskell-prime mailing list<br>
<a href="mailto:Haskell-prime@haskell.org">Haskell-prime@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-prime" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-prime</a><br>
</blockquote></div><br></div>