
+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
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
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