+1 do all instances of the proposal. It is so common for me to want to use some polymorphic function but it not be available to me because it has a constraint not satisfied by a newtype wrapper around the type I want to use it with, so I have to write a bunch of boilerplate. I think we should eliminate such boilerplate aggressively. I even think Applicative and Monad would be useful. Just because a wrapper doesn't add behavior doesn't mean we should intentionally make it incompatible with so much code.


On 5:07AM, Sun, Feb 22, 2015 Oleg Grenrus <oleg.grenrus@iki.fi> 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@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@haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries

_______________________________________________
Libraries mailing list
Libraries@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries