///|
/// Evaluate range
fn eval_range(n : Int) -> Iter[Json] {
  if n <= 0 {
    Iter::empty()
  } else {
    Array::makei(n, i => Json::number(i.to_double())).iter()
  }
}

///|
/// Evaluate first element
fn eval_first(input : Json) -> Iter[Json] raise InterpreterError {
  guard input is Array(arr) else {
    raise TypeMismatch("array", @ast_internal.json_type_name(input))
  }
  match arr {
    [first, ..] => Iter::singleton(first)
    [] => Iter::empty()
  }
}

///|
/// Evaluate last element
fn eval_last(input : Json) -> Iter[Json] raise InterpreterError {
  guard input is Array(arr) else {
    raise TypeMismatch("array", @ast_internal.json_type_name(input))
  }
  match arr.last() {
    Some(value) => Iter::singleton(value)
    None => Iter::empty()
  }
}