"Given a nonempty stream of `Numeric` values, return the product of the values." see (`function sum`) shared Value product<Value>({Value+} values) given Value satisfies Numeric<Value> { variable value product = values.first; for (val in values.rest) { product*=val; } return product; }