func Iter(params ...[]interface{}) chan []interface{} {
	c := make(chan []interface{})
	var wg sync.WaitGroup
	wg.Add(1)
	iterate(&wg, c, []interface{}{}, params...)
	go func() { wg.Wait(); close(c) }()
	return c
}
Iter takes interface-slices and returns a channel, receiving cartesian products
package cartesian
import "sync"