A Guard will either coerce an input to a value that matches some condition, or it will fail.
A Guard is used in the E language to guard the definition of a variable or the return value of a method. Implementors of Guard should always override __printOn/1 to print a guard expression reflecting the guard's value.
It is planned but not yet implemented that all objects used as guards must be DeepFrozen.
If optEjector is null, then throw the problem. Otherwise, call optEjector with the problem. optEjector should perform a non-local exit, and so should not return. If optEjector returns anyway, then throw the problem after all.
(See also: the non-optional ejectors proposal.)
Experimental. See guard-based auditing.