[Haskell-cafe] Prolog-style list syntax?
jclites at mac.com
Tue Jun 29 05:57:16 UTC 2021
> On Jun 28, 2021, at 11:15 AM, Viktor Dukhovni <ietf-dane at dukhovni.org> wrote:
> On Mon, Jun 28, 2021 at 11:04:46AM -0700, Jeff Clites via Haskell-Cafe wrote:
>>> how so? `x : y : z : zs`
>> I don’t mind the existing either, but it would be interesting if this worked:
>> [x, y, z] ++ zs = list
> It is far from clear why this or any similar pattern would be more
> ergonomic than:
> x : y : z : zs
The thread started with:
> One of the annoying (to me) inconsistencies with Haskell syntax is that `[ ]` means 'here comes a list'; but for the most common way to write a list, you can't use `[ ]`:
> > elem x  = False
> > elem x ( y: ys ) = ...
I sympathize with that observation, that there’s a special syntax for constructing lists, but you can’t use a similar syntax for the most common pattern-matching case (you can only use it for matching all elements of the list), and the special syntax is a nice visual signal that you are working with lists.
It’s not that x : y : z : zs is bad, it’s just not as distinctive. Someone thought it was worth inventing [a, b, c] even though you could just have written a : b : c : Nil, so similar motivations apply.
Something like this might work:
[x, y, z, zs*] = list
But I actually like this the best:
[x, y, z, zs...] = list
(The overlap with existing range syntax might actually be beneficial.)
More information about the Haskell-Cafe