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!

Richard

> On May 4, 2018, at 3:44 AM, Travis Whitaker <[email protected]> wrote:
> 
> 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).
> 
> coercibleToFrom :: Type -> Type -> Q Bool
> coercibleToFrom tx ty = (&&) <$> isInstance ''Coercible [tx, ty]
>                              <*> isInstance ''Coercible [ty, tx]
> 
> 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?
> 
> Travis
> 
> _______________________________________________
> ghc-devs mailing list
> [email protected]
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

_______________________________________________
ghc-devs mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to