//! Typed-atom transformation for `haz query` filter expressions.
//!
//! The parser in [`haz_query_lang`] produces an `Expr<RawAtom>`
//! whose atoms are still raw text. This module lifts atoms into
//! the typed representations the engine consumes:
//!
//! - `Expr<TagName>` for `--tags` (`QRY-003`).
//! - `Expr<ProjectName>` for `--projects` (`QRY-003`).
//! - `Expr<TaskName>` for `--tasks` (`QRY-003`).
//!
//! Each per-attribute parser is a pure `RawAtom -> Result<T,
//! AtomError>` function. Combine with
//! [`haz_query_lang::expr::Expr::try_map`] to lift a parsed
//! expression in one step.
//!
//! Path-pattern atoms (`--inputs` / `--outputs`) and relational
//! atoms (`--child-of`, `--parent-of`, `--depends-on`,
//! `--ancestor-of`) are handled by sibling modules.
pub