package main

import (
	"fmt"
)

type Callback func() int

func doSomething() {}

func callbackFactory(i int) Callback {
	return func() int {
		fmt.Println("callback", i)
		return i
	}
}

var callbacks []Callback = []Callback{
	callbackFactory(1),
	callbackFactory(2),
	callbackFactory(3),
	callbackFactory(4)}

func combiner(results []int) int {
	sum := 0
	for result := range results {
		sum += result
		if result == 2 {
			break
		}
	}
	return sum
}

func main() {

	results := make([]int, len(callbacks))
	for idx, callback := range callbacks {
		doSomething()
		results[idx] = callback()
	}
	fmt.Println("sum", combiner(results))
}
