def map(func, collection) { def output := [].diverge() for item in collection { output.push(func(item)) } return output.snapshot() } println(map(square, array))