func (m *ModuleSet) Stream() <-chan int {
	for i, mod := range m.modules {
		go mod.Stream(m.sinkFn(i))
	}
	return m.updateCh
}
Stream starts streaming all modules and returns a channel that receives the
index of the module any time one updates with new output.
package core  
import (
	"sync"
	"barista.run/bar"
	l "barista.run/logging"
	"barista.run/sink"
)
type ModuleSet struct {
	modules   []*Module
	updateCh  chan int
	outputs   []bar.Segments
	outputsMu sync.RWMutex
}
func NewModuleSet(modules []bar.Module) *ModuleSet {
	set := &ModuleSet{
		modules:  make([]*Module, len(modules)),
		outputs:  make([]bar.Segments, len(modules)),
		updateCh: make(chan int),
	}
	for i, m := range modules {
		l.Fine("%s added as %s[%d]", l.ID(m), l.ID(set), i)
		set.modules[i] = NewModule(m)
	}
	return set
}