:set -XRankNTypes -XConstraintKinds -XTypeApplications import Data.Typeable class Deferrable p where deferEither :: proxy p -> (p => r) -> Either String r instance (Typeable a, Typeable b) => Deferrable (a ~ b) where deferEither _ _ = undefined :t deferEither @(_ ~ _)