///|
pub using @lexer {
  tokenize,
  type Token,
  type TokenBody,
  type TokenizeError,
  type Offset,
}

///|
pub using @parser {parse_tokens, type ParseError}

///|
pub using @checker {check_types, type CheckError}

///|
pub using @backend {emit_moonbit}

///|
pub fn asdl_to_moonbit(code : StringView) -> String raise {
  let tokens = tokenize(code)
  let module_ = parse_tokens(tokens)
  @checker.check_types(module_)
  emit_moonbit(module_)
}