In particular, we reserve SyntaxError for synatx errors (doh)
and for macros that expects a given format at compilation time.
For example, defmodule/2 expects a :do keyword in the second
argument, not providing one is a syntax error.
In other places we impose similar restrictions bue the values
are allowed to be any expression as long as the final result
at compilation time is a given expression, for example:
when foo in @value
The right side of in can be anything as long it is a list or
a range at compilation time. Those kind of errors are now
CompileError.