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.orghttp://mail.haskell.org/cgi-bin/mailman/listinfo/libraries