code: func fold(f func(x, y regexpInfo) regexpInfo, sub []*syntax.Regexp, zero regexpInfo) regexpInfo {
  	if len(sub) == 0 {
  		return zero
  	}
  	if len(sub) == 1 {
  		return analyze(sub[0])
  	}
  	info := f(analyze(sub[0]), analyze(sub[1]))
  	for i := 2; i < len(sub); i++ {
  		info = f(info, analyze(sub[i]))
  	}
  	return info
  }
docs: // fold is the usual higher-order function.