Proposal: Add Data.Semigroup to base, as a superclass of Monoid
Mario Blažević
blamario at acanac.net
Tue Jun 11 23:05:08 CEST 2013
On 06/11/13 14:46, John Wiegley wrote:
> 1. I propose that we add the following package to base:
>
> http://hackage.haskell.org/packages/archive/semigroups/0.9.2/doc/html/Data-Semigroup.html
>
> This is somewhat in the spirit of the AMP proposal: further improving the
> correctness of our algebraic abstractions.
I was wondering how much longer until this proposal came up. +1
from me in general, but I have some quibbles with details.
> 2. That we make Semigroup a superclass of Monoid, so that (minimally):
>
> class Semigroup a where
> (<>) :: a -> a -> a
>
> class Semigroup a => Monoid a where
> mempty :: a
> mconcat :: [a] -> a
> mconcat = foldr (<>) mempty
>
> mappend :: Semigroup a => a -> a -> a
> mappend = (<>)
+1, though I'd prefer to leave mappend restricted to the Monoid
class. In the long term, I'd rather have it killed off than kept as a
synonym for (<>). Besides, it's m(onoid)append.
> 3. (Optional, recommended) There are other useful functions that can be added
> to Semigroup, such as sconcat and times1p, but I will let Edward speak to
> whether those should be proposed at this time.
They should be added in now or never, there's no reason to break
compatibility twice. I don't think times1p can be accepted in its
current form as it depends on a different library. Edward, can you make
a concrete proposal for these?
>
> 4. (Optional, recommended) That we fix the Monoid instance for Maybe to be:
>
> instance Semigroup a => Monoid (Maybe a) where
> mempty = Nothing
> instance Semigroup a => Semigroup (Maybe a) where
> Just x <> Just y = Just (x <> y)
> Nothing <> x = x
> x <> Nothing = x
+1
More information about the Libraries
mailing list