<div dir="auto">+1 to add from me, seems sensible</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Apr 14, 2021, 14:31 Viktor Dukhovni <<a href="mailto:ietf-dane@dukhovni.org">ietf-dane@dukhovni.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Wed, Apr 14, 2021 at 06:26:38PM +0000, Richard Eisenberg wrote:<br>
<br>
> In the work on simplifying the error-message infrastructure (heavy<br>
> lifting by Alfredo, in cc), I've been tempted (twice!) to add<br>
> <br>
> > instance Semigroup (Bag a) where<br>
> >   (<>) = unionBags<br>
> > <br>
> > instance Monoid (Bag a) where<br>
> >   mempty = emptyBag<br>
> <br>
> to GHC.Data.Bag.<br>
<br>
I agree that the new Monoid is appropriate.<br>
<br>
> The downside to writing these is that users might be tempted to write<br>
> e.g. mempty instead of emptyBag, while the latter gives more<br>
> information to readers and induces less manual type inference (to a<br>
> human reader). The upside is that it means Bags work well with<br>
> Monoid-oriented functions, like foldMap.<br>
<br>
I don't see the possibility of writing `mempty` as an issue.  I find<br>
myself not infrequently writing `mempty` for, e.g., empty ByteStrings,<br>
rather than ByteString.empty, because while there are lots of<br>
type-specific "empties", they often need to be used qualified, while the<br>
polymorphic `mempty` is both clear and flexible.<br>
<br>
If anything, what's atypical here is that "emptyBag" has the type in its<br>
name.  With many other types we have:<br>
<br>
    empty :: ByteString<br>
    empty :: ByteString.Builder<br>
    empty :: Map k v<br>
    empty :: Set a<br>
    empty :: Seq a<br>
    empty :: Text<br>
    empty :: Vector a<br>
    ...<br>
<br>
when the type is a Monoid, it is much simpler to just use mempty.<br>
<br>
-- <br>
    Viktor.<br>
_______________________________________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org" target="_blank" rel="noreferrer">ghc-devs@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br>
</blockquote></div>