"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;
}