Proposal: Functor and friends for the wrappers in Data.Monoid

Oleg Grenrus oleg.grenrus at iki.fi
Sat Feb 21 15:34:04 UTC 2015


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)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 842 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20150221/273b42e4/attachment.sig>


More information about the Libraries mailing list