<div><div dir="auto">+1, this is a great idea</div></div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Aug 31, 2019 at 2:36 AM David Feuer <<a href="mailto:david.feuer@gmail.com">david.feuer@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div dir="auto">It sounds like we can probably agree not to include the instance for now. But I don't want to just go with my gut feeling, so here's a concrete reason:<br></div><div dir="auto"><br></div><div dir="auto">Generically isn't *just* a DerivingVia target: it's also a perfectly reasonable newtype in its own right. Consider something like CoercibleUtils.Newtype [*]. If you try to work `under Generically` with your instance, then the type checker won't let you. That's rather sad, I think, because it seems like a perfectly sensible thing to do.</div><div dir="auto"><br></div><div dir="auto">[*] <a href="https://github.com/sjakobi/coercible-utils/blob/072c60837059aaaac47628a1822c01fbb2baed6f/src/CoercibleUtils/Newtype.hs" target="_blank">https://github.com/sjakobi/coercible-utils/blob/072c60837059aaaac47628a1822c01fbb2baed6f/src/CoercibleUtils/Newtype.hs</a></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Aug 30, 2019, 8:26 PM Alexis King <<a href="mailto:lexi.lambda@gmail.com" rel="noreferrer" target="_blank">lexi.lambda@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">> On Aug 30, 2019, at 17:26, Alexis King <<a href="mailto:lexi.lambda@gmail.com" rel="noreferrer noreferrer" target="_blank">lexi.lambda@gmail.com</a>> wrote:<br>
> <br>
> If you want to leave that instance out, that’s fine with me; I highly doubt anyone would miss it. As I said before, it’s totally useless.<br>
<br>
Actually, I take this back. It’s not totally useless, just unlikely to be useful (and ultimately inessential). It’s theoretically useful if you have some function like<br>
<br>
foo :: (Show a, Generic a) => a -> Foo<br>
<br>
and want to use the generic version of the `Show` instance, but for some reason don’t want to actually define that instance on your type. You can write `foo (Generically x)`, and it will work out. That wouldn’t work if `Generic (Generically a)` were the derived instance.<br>
<br>
On the other hand, you could always get the same behavior in a more flexible way by just defining a separate newtype and deriving the relevant instances as desired, like this:<br>
<br>
newtype GenericallyShowable a = GenericallyShowable a<br>
deriving newtype (Generic)<br>
deriving (Show) via Generically a<br>
<br>
So the instance isn’t necessary by any means, nor does it seem particularly likely to be useful in practice, but it doesn’t seem impossible that it ever could be. My vote is to keep it; I don’t see the harm.<br>
<br>
</blockquote></div>
_______________________________________________<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></div>