<div dir="ltr"><div>Ok so I implemented both ideas:</div><div><br></div><div>>    <span style="font-family:Arial,Helvetica,sans-serif"> elem2 _ []       = False</span></div>>    elem2 x [y,: ys] = x == y || elem2 x ys<div><font face="Arial, Helvetica, sans-serif"><br></font></div><div><font face="Arial, Helvetica, sans-serif">>    let [x,y,z,w,: ws] = "hello there" in ws -- yields "o there"</font></div><div><font face="Arial, Helvetica, sans-serif"><br></font></div><div><font face="Arial, Helvetica, sans-serif">In fact it was easier to implement both ideas than make a special case of `(:)`. So these work</font></div><div><font face="Arial, Helvetica, sans-serif"><br></font></div><div><font face="Arial, Helvetica, sans-serif">>    </font>let [x,:+ xs] = [1,2,3,:+ Nily] in xs</div><div><br></div><div>> let [x,`ConsSet` xs] = [1,2,3,`ConsSet` NilSet] in xs<br><br>with decls</div><div><br></div><div>><span style="font-family:Arial,Helvetica,sans-serif">    infixr 5 :+</span></div>>    data Listy a = Nily | a :+ (Listy a)  deriving (Eq, Show, Read)<br><div><br></div><div>>     infixr 5 `ConsSet`<br>>    data Set a = NilSet | ConsSet a (Set a)  deriving (Eq, Show, Read)<br><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 30 Jun 2021 at 19:00, Anthony Clayden <<a href="mailto:anthony.d.clayden@gmail.com">anthony.d.clayden@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Ok thank you for the feedback, I get the message not to re-purpose currently valid syntax.<div><br></div><div><br></div><div>>    [x, y ,: ys ]           -- ? not currently valid</div><div><br></div><div>We could make list syntax work harder</div><div><br></div><div>>    [x, y ,:+ ys ]</div><div><br></div><div>Means desugar the commas by applying constructor `:+` instead of `:`. That could be in general any constructor starting `:`.</div><div><br></div><div>Or indeed could be a pattern synonym starting `:`, which is a 'smart constructor' to build the list maintaining some invariant.</div><div><br></div><div><br></div></div>
</blockquote></div></div></div>