Using DefaultSignatures, the errorTypeName method could easily be given the implementation:
default errorTypeName :: (Typeable a) => Proxy a -> String
errorTypeName prxy = show (typeRep prxy)
Since all types are Typeable in recent GHC, this would be trivially satisfiable for all types.