<p dir="ltr">In the case of both Maybe and [], an action that succeeds once will always succeed. Parsers, other state transformers, and IO don't work like that, however. I'm not sure where else these apply.</p>
<div class="gmail_quote">On Sep 19, 2015 1:39 PM, "Tom Ellis" <<a href="mailto:tom-lists-haskell-cafe-2013@jaguarpaw.co.uk">tom-lists-haskell-cafe-2013@jaguarpaw.co.uk</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Sat, Sep 19, 2015 at 06:13:18PM +0100, Tom Ellis wrote:<br>
> On Sat, Sep 19, 2015 at 01:25:00AM -0400, David Feuer wrote:<br>
> > It kind of seems like there should be fold-like things to match some and<br>
> > many.<br>
> ><br>
> > foldrAlt :: Alternative f => (a -> b -> b) -> b -> f a -> f b<br>
> > foldrAlt c n m = foldr1Alt c n m <|> pure n<br>
> ><br>
> > foldr1Alt :: Alternative f => (a -> b -> b) -> b -> f a -> f b<br>
> > foldr1Alt c n m = c <$> m <*> foldrAlt c n m<br>
> [...]<br>
><br>
> An Alternative allows list-like behaviour when it comes to *construction*,<br>
> but offers no operation analogous to pattern-matching and therefore doesn't<br>
> allow you to look inside it or do any sort of *destruction*.<br>
><br>
> I tried foldrAlt and it looped forever, as I expected.  I also expect the<br>
> others to loop forever.<br>
<br>
I now understand this can work for some Alternatives.  The operational reading<br>
is<br>
<br>
1. Try to read an a<br>
2. If it fails, return the b<br>
3. If it succeeds, update the b<br>
4. Go to 1<br>
<br>
However, since it doesn't work even for an Alternative as simple as Maybe<br>
it's worth thinking about what class of Alternatives we really want it to<br>
apply to.<br>
<br>
Tom<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div>