A protocol for evaluating expressions.
All the types that implement this protocol.
@type expr() :: scalar() | [scalar()]
@type result() :: Gcode.Result.t(expr())
@type scalar() :: number() | boolean() | String.t()
@type t() :: term()
@spec evaluate(t()) :: result()