Guards
Wherever a pattern occurs (let, case, receive, lc, etc.) it
can be followed by an optional guard which has the form (when test ...).
Guard tests are the same as in vanilla Erlang and can contain the
following guard expressions:
(quote e)(cons gexpr gexpr)(car gexpr)(cdr gexpr)(list gexpr ...)(tuple gexpr ...)(binary ...)(progn gtest ...)- Sequence of guard tests(if gexpr gexpr gexpr)(type-test e)(guard-bif ...)- Guard BIFs, arithmetic, boolean and comparison operators
An empty guard, (when), always succeeds as there is no test which
fails. This simplifies writing macros which handle guards.