Discussion: fold the Alts

Edward Kmett ekmett at gmail.com
Sat Nov 8 19:22:07 UTC 2014


Um, msum / asum?

On Sat, Nov 8, 2014 at 2:06 PM, David Feuer <david.feuer at gmail.com> wrote:

> We've had First and Last in Data.Monoid for some time, and we now have Alt
> as well. Unfortunately, we don't have nice convenient functions for using
> them, the way we have sum and product to use Sum and Product. So we're
> stuck with funny-looking constructions like listToMaybe . mapMaybe f for
> lists, and nothing good for other containers.
>
> My thought (the names firstAlt and lastAlt would absolutely have to be
> changed to accommodate non-catch Alternatives, but I'm not inspired at
> present):
>
> firstAlt, lastAlt :: (Foldable f, Alternative m) => (a -> m b) -> f a -> m
> b
>
> firstAlt f = getAlt #. foldMap (Alt #. f)
>
> lastAlt f = getAlt #. getDual #. foldMap (Dual #. Alt #. f)
>
> where
> (#.) :: Coercible b c => (b -> c) -> (a -> b) -> (a -> c)
> f #. g = coerce g
>
> This specializes to Maybe very nicely:
>
> firstMaybe :: Foldable f => (a -> Maybe b) -> f a -> Maybe b
> firstMaybe = firstAlt
>
> lastMaybe :: Foldable f => (a -> Maybe b) -> f a -> Maybe b
> lastMaybe = lastAlt
>
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20141108/72ebdbe0/attachment-0001.html>


More information about the Libraries mailing list