<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">There's a weird idiom that I see all the time in Haskell code where coders put commas at the beginning of lines:</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">
<br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">data Thing = Thing {</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"> x :: Int</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">
,y :: Int</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"> ,z :: Int</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"> ,foo :: String</div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">
} ...</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">items = [</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">
"red"</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"> ,"blue"</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"> ,"green"</div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">]</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">
and it's pretty clear that the reason for this is that it's easier to comment out the last item by prefixing --</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default">
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">items = [</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"> "red"</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">
,"blue"</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"> -- ,"green"</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">]</div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">instead of</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">
<br></div><div class="gmail_default"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">items = [</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"> "red",</div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"> "blue" -- ,</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"> -- "green"</div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">]</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">
The same sort of thing shows up with semicolons sometimes too</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">
let {</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"> x = 1</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"> ;y = 2</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">
;z = 3</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">} in</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">
However, this punctuation-at-the-front just seems wrong. It ultimately comes from using , as a separator rather than a terminator in the syntax of sequences. But Python has this nifty quirk where you can leave a comma after the last item in a sequence, so that the following is OK in Python but not in Haskell:</div>
<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default"><div class="gmail_default"><font face="verdana, sans-serif">items = [</font></div><div class="gmail_default">
<font face="verdana, sans-serif"> "red",</font></div><div class="gmail_default"><font face="verdana, sans-serif"> "blue",</font></div><div class="gmail_default"><font face="verdana, sans-serif"> -- "green"</font></div>
<div class="gmail_default"><font face="verdana, sans-serif">]</font></div><div class="gmail_default"><br></div><div class="gmail_default" style>Part of why Python does this is to allow room in the syntax for tuples with a single item as in (1,)</div>
<div class="gmail_default"><br></div><div class="gmail_default" style><font face="verdana, sans-serif">There might be problems doing this with Haskell tuples because of tuple sections like (,,,) building a 4-tuple from 4 arguments, and where (x,y,) is interpreted as a function that takes another item and produces a three-component tuple.</font></div>
<div class="gmail_default" style><font face="verdana, sans-serif"><br></font></div><div class="gmail_default" style><font face="verdana, sans-serif">Anyway, this is a "paper cut" in the language that has been bugging me for a while, and since there's now a call for suggestions for Haskell 2014, I thought I'd ask about it.</font></div>
<div class="gmail_default" style><font face="verdana, sans-serif"><br></font></div><div class="gmail_default" style><font face="verdana, sans-serif">-- Garrett Mitchener</font></div></div></div></div></div>