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