It takes the same options as its parent.
It also requires an additional option,
type_constraints.
This is an array reference containing the Moose::Meta::TypeConstraint objects that are the members of the union type.
The name option defaults to the names all of these member types sorted and then joined by a pipe (|).

The constructor sets the implementation of the constraint so that is simply calls check on the newly created object.