<div><div dir="auto">I confess I am a minimalist. Been coding Haskell for a year after a break (my 1982 dissertation was “Optimization of Functional Programs” so my interest goes back a ways).  Were I the God of Haskell I would go down the above-mentioned synonym list and deprecate all the less-general “return” things. </div></div><div dir="auto"><br></div><div dir="auto">I confess also that the semantics of “pure” seems in some cases ((,), etc) to have been chosen for pragmatic reason; inevitably one must choose an embedding when there is a choice, and “I got there first” can be justified if it produces lots of elegant simplicity. To my taste it’s too bad that Collection means “ordered collection” but I imagine that there are more applications in which deterministic iteration is useful. </div><div dir="auto"><br></div><div dir="auto">All that being said, I vote for singleton as a readable method name for Collection instances. </div><div><div dir="auto">To my way of thinking this implies picking a Collection class and moving it closer to the Root of all Haskell. </div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Aug 15, 2019 at 13:23 Andreas Abel <<a href="mailto:andreas.abel@ifi.lmu.de">andreas.abel@ifi.lmu.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Sven Panne wrote:<br>
<br>
 > Code is mainly *read*, not written, so the less you need<br>
 > to know to read and understand code, the better it is.<br>
<br>
Yes, and this is an argument *for* singleton, not against:<br>
<br>
1. singleton is already known to the Haskell reader from the other <br>
collection types.<br>
<br>
2. singleton is unambiguously invoking the image of creating a singleton <br>
collection.<br>
<br>
In contrast, "pure" invokes the image of creating a effect-free monadic <br>
computation.  (:[]) invokes the image of a (mechanical) gorilla smiling <br>
at you. ;-)  All these associations distract from reading the code.  In <br>
both cases, a mental translation step is needed:<br>
<br>
a) In the case of "pure", the conscious intervention that here we are <br>
not concerned with non-determinism (the list monad), but just creating a <br>
singleton collection.<br>
<br>
b) In the case of "(:[])", the conscious intervention consists of<br>
    - recognizing the decomposition (: [])<br>
    - recognizing the operator section<br>
    - understanding it as "cons something to the empty list"<br>
    - understanding this as creating a singleton collection.<br>
<br>
Both interventions hamper the flow of reading.<br>
<br>
Of course, the procedure b) becomes automatic with use.  However, it is <br>
still a significant barrier to the newcomer.<br>
<br>
Cheers,<br>
Andreas<br>
<br>
P.S.: if the gorilla (:[]) is vanishing from the Agda code base, I am <br>
mostly to be blamed for this.<br>
<br>
On 2019-08-14 21:51, Sven Panne wrote:<br>
> Am Mi., 14. Aug. 2019 um 21:35 Uhr schrieb Oliver Charles <br>
> <<a href="mailto:ollie@ocharles.org.uk" target="_blank">ollie@ocharles.org.uk</a> <mailto:<a href="mailto:ollie@ocharles.org.uk" target="_blank">ollie@ocharles.org.uk</a>>>:<br>
> <br>
>     I'd also be interested in a kind of "reverse" argument - *if* we had<br>
>     this added, what are the costs? There are arguments of "no,<br>
>     pure/robot ninja is enough" - fine, we're not taking those away so<br>
>     you aren't required to use singleton  But what is the *downside* of<br>
>     having singleton? [...]<br>
> <br>
> <br>
> A similar argument comes up with basically every extension, and it is a <br>
> very weak one. Code is mainly *read*, not written, so the less you need <br>
> to know to read and understand code, the better it is. Lots of different <br>
> ways to do the same thing makes programs harder to understand, and you <br>
> ultimately end up with Perl. :-}  And if we take this argument <br>
> seriously, we should probably add "doubleton" (synonym for "replicate <br>
> 2"), "tripleton" (synonym for "replicate 3"), etc., too.  Hey, you don't <br>
> have to use it after all, we're not taking away "replicate"...<br>
> <br>
> _______________________________________________<br>
> Libraries mailing list<br>
> <a href="mailto:Libraries@haskell.org" target="_blank">Libraries@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
> <br>
_______________________________________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org" target="_blank">Libraries@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
</blockquote></div></div>