Well, you could probably use more of them. They don't do anything when called and only help you reducing type parameters.
Do you want your data type to be generic? If not you could also use type annotations.
For generic data types that don't do anything the type can't be inferred from the patch itself. So for that case ConstraintTypes is meant to be a workaround, as we lack the feature of adding type parameters manually to the patch and referring to them in type annotations.
Anyway where do you use it? I wouldn't say it's good practice, but just a workaround for a very specific case. If you don't need it don't do it.