Description: Validate custom types by composing primitive validation functions. Use one common API for validating
all kind of business rules including aspects of the application state. One common error type for all
kind of constraint violations. It is designed to help with error messages that are meaningful to the
user of an application.