<div dir="ltr">A workaround that's suitable for what I'm after is defining a class like this for some fixed T.<div><br></div><div><font face="monospace, monospace">instance (Coercible a T) => C a</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="arial, helvetica, sans-serif">I'm curious what it'd take to add a qReifyCoercible method; does the renamer know anything about Coercible?</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Thanks,</font></div><div><font face="arial, helvetica, sans-serif">Travis</font></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 4, 2018 at 11:01 AM, Richard Eisenberg <span dir="ltr"><<a href="mailto:rae@cs.brynmawr.edu" target="_blank">rae@cs.brynmawr.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">I don't think there's an easy way to do this. We could imagine extending Quasi to have a method to check for coercibility, but I don't think there's a way to do this in the current TH API. Sorry!<span class="HOEnZb"><font color="#888888"><div><br></div><div>Richard</div></font></span><div><br><div><blockquote type="cite"><div><div class="h5"><div>On May 4, 2018, at 3:44 AM, Travis Whitaker <<a href="mailto:pi.boy.travis@gmail.com" target="_blank">pi.boy.travis@gmail.com</a>> wrote:</div><br class="m_-8332350405425405894Apple-interchange-newline"></div></div><div><div><div class="h5"><div dir="ltr"><div class="gmail_quote"><div dir="ltr">Given that Coercible instances are Deeply Magical, perhaps I'm being a bit naive here, but I recently tried to write a TH function that can check if one type is a newtype of another (or a newtype of a newtype of another, etc).<div><br></div><font face="monospace, monospace">coercibleToFrom :: Type -> Type -> Q Bool<br>coercibleToFrom tx ty = (&&) <$> isInstance ''Coercible [tx, ty]<br>                             <*> isInstance ''Coercible [ty, tx]</font><br><div><font face="monospace, monospace"><br></font></div><div><font face="arial, helvetica, sans-serif">If this worked as I'd hoped, I'm almost certain checking reflexively is redundant. However, I can't seem to get reifyInstances to ever return an InstanceDec for a Coercible instance. Given that these instances are generated on the fly by the typechecker, there's no way to make them available at TH runtime, correct? And, given that, is there an easy way to find out with TH whether not I'll be able to use coerce without taking all the Decs apart to hunt for NewtypeD?</font></div><span class="m_-8332350405425405894HOEnZb"><font color="#888888"><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Travis</font></div></font></span></div>
</div><br></div></div></div><span class="">
______________________________<wbr>_________________<br>ghc-devs mailing list<br><a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br><a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/ghc-devs</a><br></span></div></blockquote></div><br></div></div></blockquote></div><br></div>