Discussion: fold the Alts

David Feuer david.feuer at gmail.com
Sat Nov 8 19:27:02 UTC 2014


Ah, yes, it's lovely how I can look at a function one day and then forget
it exists the very next. Carry on!

On Sat, Nov 8, 2014 at 2:22 PM, Edward Kmett <ekmett at gmail.com> wrote:

> 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/77988b55/attachment.html>


More information about the Libraries mailing list