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