///|
fn require_function_arg(
  args : Array[ParseNode],
  index : Int,
  func_name : String,
) -> ParseNode raise ParseFailure {
  guard args.get(index) is Some(arg) else {
    raise InternalInvariant(
      message="Missing argument \{index} for " + func_name,
    )
  }
  arg
}

///|
fn ord_argument(arg : ParseNode) -> Array[ParseNode] {
  match arg {
    OrdGroup(body~, ..) => body
    _ => [arg]
  }
}

///|
fn normalize_argument(arg : ParseNode) -> ParseNode {
  match arg {
    OrdGroup(body=[only], ..) => only
    _ => arg
  }
}