You *can* do this, but it's often not so concise. When the type constructor has parameters, you need to pin them down using ScopedTypeVariables. So you end up needing to give a signature for the method type in order to bring into scope variables you then use in the argument to coerce. If you have
newtype Foo f a = Foo (Foo f a)
then you may need
instance Bar f => Bar (Foo f) where
bah = coerce (bah @ f @ a)
:: forall a . C a => ...
to pin down the C instance.
If you don't want to use explicit type application (e.g., you're using a library that does not claim to have stable type argument order), things get even more verbose.