I would suggest that the coerce-based instances be stolen from Data.Identity.

On Feb 21, 2015 10:34 AM, "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