<div dir="ltr">Although the example you give works today, it would stop working if mappend ever stopped being a typeclass method of Monoid. I cannot remember if this is on the roadmap. It's certainly not happening any time soon, but it may happen eventually. (It's similar in spirit to removing return from Monad)<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Sep 14, 2019 at 4:48 PM Zemyla <<a href="mailto:zemyla@gmail.com">zemyla@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">The point is that someone can write<br>
<br>
instance Monoid Thingy where<br>
  mempty = <something><br>
  mappend a b = <something else><br>
  mconcat ls = <another thing><br>
<br>
deriving instance Semigroup Thingy via (WrappedMonoid Thingy)<br>
<br>
Most of the benefit is not having to look up "stimesMonoid" over and over again.<br>
<br>
On Sat, Sep 14, 2019 at 3:36 PM John Villarreal via Libraries<br>
<<a href="mailto:libraries@haskell.org" target="_blank">libraries@haskell.org</a>> wrote:<br>
><br>
> Hello Georgi,<br>
><br>
><br>
> I'm confused about WrappedMonoid. How can something have a Monoid instance already without having a Semigroup instance in the first place?<br>
><br>
> But also what is the benefit of WrappedMonoid over the standard way of defining Semigroups and Monoids for your example<br>
><br>
> data List a = Nil | Cons a (List a)<br>
><br>
> instance Semigroup (List a) where<br>
>   Nil       <> ys = ys<br>
>   Cons x xs <> ys = Cons x (xs <> ys)<br>
><br>
> instance Monoid (List a) where mempty = Nil<br>
><br>
> ?<br>
><br>
> Cheers,<br>
> John<br>
><br>
><br>
> On Saturday, 14 September 2019, 19:18:01 UTC, Georgi Lyubenov <<a href="mailto:godzbanebane@gmail.com" target="_blank">godzbanebane@gmail.com</a>> wrote:<br>
><br>
><br>
> Hello!<br>
><br>
> Sorry if this is not the right place to ask!<br>
><br>
> As of right now (14.09.2019) Data.Semigroup.WrappedMonoid is slated to be deprecated.<br>
><br>
> I believe that this newtype is actually useful in tandem with DerivingVia, as it allows you to derive the Semigroup instance for something that has a Monoid instance already, as discussed in this twitter thread.<br>
><br>
> Would it be possible to *not* deprecate it in the future, and instead keep it around for exactly this purpose?<br>
><br>
> Cheers,<br>
> Georgi<br>
> _______________________________________________<br>
> Libraries mailing list<br>
> <a href="mailto:Libraries@haskell.org" target="_blank">Libraries@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
> _______________________________________________<br>
> Libraries mailing list<br>
> <a href="mailto:Libraries@haskell.org" target="_blank">Libraries@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
_______________________________________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org" target="_blank">Libraries@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature">-Andrew Thaddeus Martin</div>