fn d(n int) f64 { return f64(n) }
fn e(n int) { }
fn f(n int) ?f64 { return f64(n) }
fn g(n int) ? { }

fn main() {
	tg := [
		go d(0)
		go d(1)
	]
	r := tg.wait() ?
	println(r)
	s := tg[0].wait() or { panic('problem') }
	println(s)
	tg2 := [
		go e(0)
		go e(1)
	]
	tg2.wait() or { panic('problem') }
	tg2[0].wait() ?
	tg3 := [
		go f(0)
		go f(1)
	]
	tg3.wait() or { panic('problem') }
	for t in tg3 {
		a := t.wait()
		println(a)
	}
	for i, _ in tg3 {
		a := tg3[i].wait()
		println(a)
	}
	tg4 := [
		go g(0)
		go g(1)
	]
	tg4.wait()
	tg4[0].wait()
	go g(3) or { panic('problem') }
}
