Proposal: Add singleton function to Data.List module
Andreas Abel
andreas.abel at ifi.lmu.de
Thu Aug 15 17:23:27 UTC 2019
Sven Panne wrote:
> Code is mainly *read*, not written, so the less you need
> to know to read and understand code, the better it is.
Yes, and this is an argument *for* singleton, not against:
1. singleton is already known to the Haskell reader from the other
collection types.
2. singleton is unambiguously invoking the image of creating a singleton
collection.
In contrast, "pure" invokes the image of creating a effect-free monadic
computation. (:[]) invokes the image of a (mechanical) gorilla smiling
at you. ;-) All these associations distract from reading the code. In
both cases, a mental translation step is needed:
a) In the case of "pure", the conscious intervention that here we are
not concerned with non-determinism (the list monad), but just creating a
singleton collection.
b) In the case of "(:[])", the conscious intervention consists of
- recognizing the decomposition (: [])
- recognizing the operator section
- understanding it as "cons something to the empty list"
- understanding this as creating a singleton collection.
Both interventions hamper the flow of reading.
Of course, the procedure b) becomes automatic with use. However, it is
still a significant barrier to the newcomer.
Cheers,
Andreas
P.S.: if the gorilla (:[]) is vanishing from the Agda code base, I am
mostly to be blamed for this.
On 2019-08-14 21:51, Sven Panne wrote:
> Am Mi., 14. Aug. 2019 um 21:35 Uhr schrieb Oliver Charles
> <ollie at ocharles.org.uk <mailto:ollie at ocharles.org.uk>>:
>
> I'd also be interested in a kind of "reverse" argument - *if* we had
> this added, what are the costs? There are arguments of "no,
> pure/robot ninja is enough" - fine, we're not taking those away so
> you aren't required to use singleton But what is the *downside* of
> having singleton? [...]
>
>
> A similar argument comes up with basically every extension, and it is a
> very weak one. Code is mainly *read*, not written, so the less you need
> to know to read and understand code, the better it is. Lots of different
> ways to do the same thing makes programs harder to understand, and you
> ultimately end up with Perl. :-} And if we take this argument
> seriously, we should probably add "doubleton" (synonym for "replicate
> 2"), "tripleton" (synonym for "replicate 3"), etc., too. Hey, you don't
> have to use it after all, we're not taking away "replicate"...
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>
More information about the Libraries
mailing list