Validation types are Cmdr's answer to the necessity of moving
between the string and internal representations of
cmdr::parameter instances.
Given a string representation they either return the
associated internal representation or raise an error,
signaling that the string was illegal. This part of their work, the
verification of the legality of the input string gave them their name.

The general concept of validation types was taken from
snit, and modified to suit Cmdr.
Where snit's types expect only a single method to validate the input
Cmdr expects all types to support an ensemble of four
methods.
One for the basic validation and transformation of the input, another
for the release of any internal representation so generated, plus two
more for delivery of a default representation and support for command
line completion.
The details (method names, signatures, etc.) can be found in section
API below.

As an example the implementation of the standard boolean
validation type is shown in section Example.

It should be noted that while snit's validation types
in principle allow for the transformation of input into a disparate
internal representation, they never went so far as to allow complex
representations which might require the release of resources after
use.

The validate and release methods are primarily used
during either Completion or Execution phases, depending
on the chosen deferal state.
They may also be used during the Parsing phase, for optional
inputs under the test-regime].

The complete method will be used whereever the system
activates an interactive command line shell where arguments may be
assigned to parameters.

The default method on the other hand can expect to be
invoked during the Dispatch phase, as part of the system's
declaration processing, if not preempted by default and
generate declarations for the parameter.
Note here that the default method has the same signature as a
paramete's generate callback and can be used as such.
This is actually needed and useful when the default internal
representation for a validation type cannot be expressed as a fixed
value and its creation while parsing the specification itself is too
early.
We can still use the validation type for its generation, by hooking it
explicitly into generate to change the timing of its invokation.

The cmdr::parameter instance holding the internal
representation to release. While the standard validation types do not
make use of it a custom type may have need for access to the context
of the completion.

The cmdr::parameter instance governing the validation
process. The standard validation types make use of it in case of a
validation failure to generate a proper error message.
See also Utilities for Validation Types for commands helping
with keeping validation error messages uniform.