///|
pub fn async_run(f : async () -> Unit noraise) -> Unit = "%async.run"

///|
/// `suspend` 会中断当前协程的运行。
/// `suspend` 会接受一个回调函数,并让这个回调函数来操作中断的协程
pub async fn[T, E : Error] suspend(
  // `f` 是负责操作中断的协程的回调函数
  f : (
    // `f` 的第一个参数用于继续运行被中断的协程
    (T) -> Unit,
    // `f` 的第二个参数用于取消被中断的协程。
    // 取消会被表示为在中断处抛出错误
    (E) -> Unit,
  ) -> Unit,
) -> T raise E = "%async.suspend"