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 Deep_Frozen.
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.