<p dir="ltr">Or, to keep it a fold,</p>
<p dir="ltr">asum xs = foldr go (fromMaybe empty) xs Nothing where<br>
  go x r Nothing = r (Just x)<br>
  go x r (Just prev) = prev <|> r (Just x)</p>
<div class="gmail_quote">On Jun 10, 2016 11:09 AM, "Dan Burton" <<a href="mailto:danburton.email@gmail.com">danburton.email@gmail.com</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Add a pattern match for the single-element list to stop it from hitting the empty list base case.<span></span><div><br></div><div>asum [] = empty</div><div>asum [x] = x</div><div>asum (x:xs) = x <|> asum xs<div class="elided-text"><br><br>On Friday, June 10, 2016, Tom Ellis <<a href="mailto:tom-lists-haskell-cafe-2013@jaguarpaw.co.uk" target="_blank">tom-lists-haskell-cafe-2013@jaguarpaw.co.uk</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Fri, Jun 10, 2016 at 05:37:41PM +0300, Юрий Сыровецкий (Yuriy Syrovetskiy) wrote:<br>
> It is so because in base library<br>
><br>
>     asum = foldr (<|>) empty<br>
><br>
> What if it was defined<br>
><br>
>     asum [] = empty<br>
>     asum [x:xs] = x <|> asum xs<br>
<br>
Those are the same (assuming you mean (x:xs) instead of [x:xs]).<br>
<br>
Tom<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a>Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div></div><font color="#888888"><br><br>-- <br>-- Dan Burton<br>
</font><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>
<br></blockquote></div>