///|
pub async fn async_each[T](iter : Iter[T], f : async (T) -> Unit) -> Unit {
  let fst = iter.head()
  if fst is Some(v) {
    f!(v)
    async_each!(iter[1:], f)
  }
}

///|
pub async fn async_each2[A, B](
  iter : Iter2[A, B],
  f : async (A, B) -> Unit
) -> Unit {
  async_each!(iter.iter(), fn(ab) {
    let a = ab.0
    let b = ab.1
    f!(a, b)
  })
}

///|
test "Async print arrays" {
  async fn print(i : Int) {
    println("Element: \{i}")
  }

  @promise.spawn(async fn(_) { [1, 2, 3].iter() |> async_each!(print) })
  |> ignore
}