Is there a way to write Constraint aliases?

I find myself wanting to define something like

type MonadErrorV :: Row -> (Type -> Type) -> Type -> Constraint
type MonadErrorV r m = MonadThrow (Variant r) m

or

type MonadErrorV :: Row -> (Type -> Type) -> Type -> Constraint
type MonadErrorV r m a = MonadThrow (Variant r) m a

To clean up some function signatures, but I can’t seem to find a way. Any pointers I could use?

I’m not 100% sure but I think you can do it by creating a typeclass with no definitions¹ like this:

class MonadErrorV :: Row Type -> (Type -> Type) -> Constraint
class MonadThrow (Variant r) m <= MonadErrorV r m

(also the kind of Row in this case is Row Type, and note that MonadErrorV is on the right side of the arrow²)

I believe that would make these two function signatures equivalent:

f :: forall r m a
   . MonadThrow (Variant r) m
  => a
  -> m a

g :: forall r m a
   . MonadErrorV r m
  => a
  -> m a

¹ Jordan’s Reference: 05-Typeclasses-with-No-Definitions.purs
² PureScript Documentation: Type Classes: Superclasses