Argument type validation with user-friendly error messages

Added `set`.