Proposal: Functor and friends for the wrappers in Data.Monoid
Oleg Grenrus
oleg.grenrus at iki.fi
Sun Feb 22 10:07:09 UTC 2015
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 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>
>
> 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
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
-------------- 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/00a065a5/attachment.sig>
More information about the Libraries
mailing list