:set -XHaskell2010 :set -XRankNTypes -XConstraintKinds -XTypeApplications -XTypeOperators 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 @(_ ~ _)