The main concern with generalizing (++) is that it was once generalized -- completely differently! -- for mplus in MonadPlus. So whether Monoid's mappend is the natural generalization of (++) or MonadPlus's mplus is, is not entirely clear. Neither one can completely subsume all of the use-cases of the other.
 
A secondary concern is that neither MonadPlus nor Monoid are in the Prelude, so its generalized form would have to be exported from Data.Monoid with a different type signature breaking any pre-existing code that brought in Data.Monoid unqualified and happened to use lists.
 
I'm less sold by the second concern than the first one, but both make me hesitate.
 
Bryan's/Jules's existing proposal of a new operator avoids both of these snarls.
 
-Edward Kmett


 
On Fri, Jul 17, 2009 at 10:53 AM, Alexander Dunlap <alexander.dunlap@gmail.com> wrote:
On Tue, Jun 30, 2009 at 5:37 PM, Bryan O'Sullivan<bos@serpentine.com> wrote:
> Ticket: http://hackage.haskell.org/trac/ghc/ticket/3339
>
> From the ticket:
>
> This proposal was, I think, originally suggested by Jules Bean. The idea is
> to add two functions to the Data.Monoid module, (+>) and (<+), corresponding
> to different uses of mappend. These should not be methods of the Monoid
> typeclass, but top-level functions.
>
> I hope (but slightly doubt) that the visual nature of the two operators
> might help to counter the thought that monoids are just for gluing things
> together.
>
> (+>) :: (Monoid a) => a -> a -> a
> a +> b = a `mappend` b
>
> (<+) :: (Monoid a) => a -> a -> a
> a <+ b = b `mappend` a
>
> infixl 4 +>
> infixl 4 <+
>
> Proposed deadline: two weeks.
>
> If this looks reasonable, I'll attach darcs patches.
>

I (and apparently a lot of other people who commented on that ticket)
would prefer that (++) be generalized instead of introducing a new
operator.

Alex
_______________________________________________
Libraries mailing list
Libraries@haskell.org
http://www.haskell.org/mailman/listinfo/libraries