///|
/// Error type shared by the lexer, parser, and evaluator.
pub(all) suberror PromqlError {
  LexError(String, Int)
  ParseError(String, Int)
  EvalError(String)
}

///|
pub impl Show for PromqlError with fn output(self, logger) {
  match self {
    LexError(message, offset) => logger <+ "lex error at \{offset}: \{message}"
    ParseError(message, offset) =>
      logger <+ "parse error at \{offset}: \{message}"
    EvalError(message) => logger <+ "evaluation error: \{message}"
  }
}