Guards are used as a convenient syntax for enforcing user-defined invariants. They can be used as types, but can also enforce arbitrary constraints. Use guards to annotate variable and parameter declarations, function return results, and property definitions. Each guard is asked to approve an incoming value, the specimen, to determine whether to let it pass, coerce it, or reject it. Examples of us