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

Oleg Grenrus oleg.grenrus at iki.fi
Sun Feb 22 08:04:28 UTC 2015


Based on http://git.haskell.org/ghc.git/blob/refs/heads/ghc-7.10:/libraries/base/Data/Monoid.hs <http://git.haskell.org/ghc.git/blob/refs/heads/ghc-7.10:/libraries/base/Data/Monoid.hs>
only First and Last have Functor, Applicative and Monad; Foldable, Traversable and Data are missing.

> On 22 Feb 2015, at 09:56, Edward Kmett <ekmett at gmail.com> wrote:
> 
> Many instances for data types in Data.Monoid have already been added in 7.10.
> 
> Are these still missing?
> 
> -Edward
> 
> On Sat, Feb 21, 2015 at 10:34 AM, Oleg Grenrus <oleg.grenrus at iki.fi <mailto:oleg.grenrus at 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> <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 at haskell.org <mailto:Libraries at haskell.org>
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries <http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries>
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20150222/dea124a5/attachment.html>
-------------- 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/20150222/dea124a5/attachment.sig>


More information about the Libraries mailing list