Re: [Haskell-cafe] All-fail case in asum

Or, to keep it a fold,
asum xs = foldr go (fromMaybe empty) xs Nothing where
go x r Nothing = r (Just x)
go x r (Just prev) = prev <|> r (Just x)
On Jun 10, 2016 11:09 AM, "Dan Burton"
On Fri, Jun 10, 2016 at 05:37:41PM +0300, Юрий Сыровецкий (Yuriy Syrovetskiy) wrote:
It is so because in base library
asum = foldr (<|>) empty
What if it was defined
asum [] = empty asum [x:xs] = x <|> asum xs
Those are the same (assuming you mean (x:xs) instead of [x:xs]).
Tom _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
-- -- Dan Burton _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe

I think we're getting a little off track. The point is that the behaviour Yuriy is seeing is inconsistent. Yuriy, can you please post some complete code demonstrating your problem? I have not been able to replicate it. Tom On Fri, Jun 10, 2016 at 11:32:45AM -0400, David Feuer wrote:
Or, to keep it a fold,
asum xs = foldr go (fromMaybe empty) xs Nothing where go x r Nothing = r (Just x) go x r (Just prev) = prev <|> r (Just x) On Jun 10, 2016 11:09 AM, "Dan Burton"
wrote: Add a pattern match for the single-element list to stop it from hitting the empty list base case.
asum [] = empty asum [x] = x asum (x:xs) = x <|> asum xs
participants (2)
-
David Feuer
-
Tom Ellis