Proposal: Add missing Foldable/Traversable instances for Prelude types
Edward Kmett
ekmett at gmail.com
Sat Jan 22 05:16:46 CET 2011
I went with the default being to avoid prematurely forcing a bottom when
possible, to avoid being called out by the strictness police, but I'm not
terribly wedded to the behavior.
-Edward
On Fri, Jan 21, 2011 at 7:27 PM, Isaac Dupree <
ml at isaac.cedarswampstudios.org> wrote:
> On 01/21/11 18:33, Edward Kmett wrote:
>
>> I'd like to propose adding the following missing instances to
>> Data.Foldable
>> and Data.Traversable respectively, since there isn't a canonical location
>> that they could be added outside of those packages without orphans, their
>> definition is unambiguous, and they are quite useful (plus, I happen to
>> need
>> them for a monad transformer in my adjunctions package).
>>
>> instance Foldable (Either a) where
>> foldMap f (Left a) = mempty
>> foldMap f (Right b) = f b
>>
>> instance Foldable ((,)e) where
>> foldMap f ea = f (snd ea)
>>
>> instance Traversable (Either a) where
>> traverse f (Left a) = pure (Left a)
>> traverse f (Right a) = Right<$> f a
>>
>> instance Traversable ((,)e) where
>> traverse f ~(e,a) = (,) e<$> f a
>>
>
> Those look correct. Is there some reason you chose to make the (,)
> instances less strict in the pair? For example, traverse on "undefined"
> gives you, modulo the applicative layer, "(undefined, f undefined)". (I
> haven't thought of a reason (practical or theoretical) for either behavior.)
>
> -Isaac
>
> _______________________________________________
> 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/20110121/46e6782a/attachment.htm>
More information about the Libraries
mailing list