public AqlBinaryOperator(
            AqlExpression left,
            AqlExpression right,
            AqlExpressionType type
            )
        {
            if (
                type != AqlExpressionType.Add &&
                type != AqlExpressionType.Subtract &&
                type != AqlExpressionType.Multiply &&
                type != AqlExpressionType.Divide &&
                type != AqlExpressionType.Modulo &&
                type != AqlExpressionType.Equal &&
                type != AqlExpressionType.NotEqual &&
                type != AqlExpressionType.GreaterThan &&
                type != AqlExpressionType.GreaterThanOrEqual &&
                type != AqlExpressionType.LessThan &&
                type != AqlExpressionType.LessThanOrEqual &&
                type != AqlExpressionType.And &&
                type != AqlExpressionType.Or
                )
            {
                throw new ArgumentException(
                          $"Provided expression type {type} is not a binary operation"
                          );
            }

            ExpressionType = type;
            Left           = left;
            Right          = right;
            Parameters     = new ReadOnlyCollection <string>(
                left.Parameters.Union(right.Parameters).ToList()
                );
        }
        public AqlUnaryOperator(AqlExpression operand, AqlExpressionType type)
        {
            if (
                type != AqlExpressionType.UnaryPlus &&
                type != AqlExpressionType.UnaryMinus &&
                type != AqlExpressionType.Not
                )
            {
                throw new ArgumentException(
                          $"Provided expression type {type} is not an unary operation"
                          );
            }

            ExpressionType = type;
            Operand        = operand;
        }