T7148a.hs:19:50: Could not coerce from ‘Result a b’ to ‘b’ because ‘Result a b’ and ‘b’ are different types. arising from the coercion of the method ‘coerce’ from type ‘forall b. Proxy b -> a -> Result a b’ to type ‘forall b. Proxy b -> IS_NO_LONGER a -> Result (IS_NO_LONGER a) b’ Possible fix: use a standalone 'deriving instance' declaration, so you can specify the instance context yourself When deriving the instance for (Convert (IS_NO_LONGER a))