-type pattern() :: { pattern, expression() }. -type escape() :: { escape, expression() }. -type comparison_operator() :: eq | neq | gt | gte | lt | lte. -type not_predicate() :: { not_op, predicate() }. -type is_null_predicate() :: { is_null, property_expression() }. -type is_not_null_predicate() :: { is_not_null, property_expression() }. -type exist_predicate() :: { exist, property_expression() }. -type comparison_predicate() :: { comparison_operator(), expression(), expression() }. -type and_predicate() :: { and_op, predicate(), predicate() }. -type or_predicate() :: { or_op, predicate(), predicate() }. -type in_predicate() :: { in, expression(), expression() }. -type not_in_predicate() :: { not_in, expression(), expression() }. -type like_predicate() :: { like, expression(), pattern() }. -type not_like_predicate() :: { not_like, expression(), pattern() }. -type like_escape_predicate() :: { like, expression(), pattern(), escape() }. -type not_like_escape_predicate() :: { not_like, expression(), pattern(), escape() }. -type unary_predicate() :: not_predicate() | is_null_predicate() | is_not_null_predicate() | exist_predicate(). -type binary_predicate() :: comparison_predicate() | and_predicate() | or_predicate() | in_predicate() | not_in_predicate() | like_predicate() | not_like_predicate(). -type ternary_predicate() :: like_escape_predicate() | not_like_escape_predicate(). -type predicate() :: unary_predicate() | binary_predicate() | ternary_predicate(). -type properties() :: any(). -type symbol() :: string(). -type constant_type() :: integer_constant | decimal_constant | approximate_number_constant | boolean_constant | string_constant. -type arithmetic_operation() :: plus | minus | multiply | divide | percent. -type sign_symbol() :: plus | minus. -type property_expression() :: { property, symbol() }. -type constant_expression() :: { constant_type(), symbol() }. -type literal_expression() :: property_expression() | constant_expression(). -type unary_expression() :: { sign_symbol(), expression() }. -type binary_expression() :: { arithmetic_operation(), expression(), expression() }. -type expression() :: literal_expression() | unary_expression() | binary_expression(). -type value() :: number() | string(). -spec evaluator:make_expression_evaluator(expression()) -> expression_evaluator(). -type expression_evaluator() :: fun((properties()) -> value()). -spec evaluator:make_integer_evaluator(string()) -> expression_evaluator(). -spec evaluator:make_decimal_evaluator(string()) -> expression_evaluator(). -spec evaluator:make_boolean_evaluator(string()) -> expression_evaluator(). -spec evaluator:make_string_evaluator(string()) -> expression_evaluator(). -spec evaluator:make_property_evaluator(string()) -> expression_evaluator(). -spec evaluator:make_negation_evaluator(expression_evaluator()) -> expression_evaluator(). -spec evaluator:make_addition_evaluator(expression_evaluator(), expression_evaluator()) -> expression_evaluator(). -spec evaluator:make_subtraction_evaluator(expression_evaluator(), expression_evaluator()) -> expression_evaluator(). -spec evaluator:make_predicate_evaluator(predicate()) -> predicate_evaluator(). -type predicate_evaluator() :: fun((properties()) -> true | false) | fun((predicate_evaluator()) -> predicate_evaluator()) | fun((predicate_evaluator(), predicate_evaluator()) -> predicate_evaluator()) | fun((expression_evaluator(), expression_evaluator()) -> predicate_evaluator()). -spec evaluator:make_not_evaluator(predicate_evaluator()) -> predicate_evaluator(). -spec evaluator:make_and_evaluator(predicate_evaluator(), predicate_evaluator()) -> predicate_evaluator(). -spec evaluator:make_equal_evaluator(expression_evaluator(), expression_evaluator()) -> predicate_evaluator(). -spec evaluator:make_greater_than_evaluator(expression_evaluator(), expression_evaluator()) -> predicate_evaluator().