Proposal: Functor and friends for the wrappers in Data.Monoid

Andreas Abel abela at chalmers.se
Tue Feb 24 08:10:57 UTC 2015


-1 on C.  A container of exactly one element is not a good 
Applicative/Monad.

+1 on A.

No opinion about the rest.

On 22.02.2015 11:07, Oleg Grenrus wrote:
> To clarify the discussion:
>
> Let's add the following instances:
>
> A: Functor, Foldable, Traversable to Sum, Product, Dual, First, and Last
> B: Data to everything in Data.Monoid (except Endo): Sum, Product, Dual, First and Last, All, Any, Alt
> C: Applicative, Monad, MonadFix to Sum, Product, Dual, First and Last
> D: Data to Identity
>
> All seem to agree on A and B, C is "not sure", and D is new item.
>
> - Oleg
>
>> On 21 Feb 2015, at 17:34, Oleg Grenrus <oleg.grenrus at iki.fi> wrote:
>>
>> I propose to add Functor, Applicative, Monad, Foldable, and Traversable and maybe even MonadFix instances to wrapper newtypes in the Data.Monoid module.
>> The same way as in the semigroups package, e.g. https://hackage.haskell.org/package/semigroups-0.16.1/docs/Data-Semigroup.html#t:Min <https://hackage.haskell.org/package/semigroups-0.16.1/docs/Data-Semigroup.html#t:Min>
>>
>> Basically:
>>
>> instance Functor Sum where
>>   fmap f (Sum x) = Sum (f x)
>>
>> instance Foldable Sum where
>>   foldMap f (Sum a) = f a
>>
>> instance Traversable Sum where
>>   traverse f (Sum a) = Sum <$> f a
>>
>> instance Applicative Sum where
>>   pure = Sum
>>   a <* _ = a
>>   _ *> a = a
>>   Sum f <*> Sum x = Sum (f x)
>>
>> instance Monad Sum where
>>   return = Sum
>>   _ >> a = a
>>   Sum a >>= f = f a
>>
>> instance MonadFix Sum where
>>   mfix f = fix (f . getSum)
>> _______________________________________________
>> Libraries mailing list
>> Libraries at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>
>
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>


-- 
Andreas Abel  <><      Du bist der geliebte Mensch.

Department of Computer Science and Engineering
Chalmers and Gothenburg University, Sweden

andreas.abel at gu.se
http://www2.tcs.ifi.lmu.de/~abel/


More information about the Libraries mailing list