"Given a nonempty stream of `Comparable` values, 
 return the smallest value in the stream."
see (`interface Comparable`, 
     `function max`, 
     `function smallest`)
shared Absent|Value min<Value,Absent>(Iterable<Value,Absent> values) 
        given Value satisfies Comparable<Value>
        given Absent satisfies Null {
    value first=values.first;
    if (exists first) {
        variable value min=first;
        for (val in values.rest) {
            if (val<min) {
                min=val;
            }
        }
        return min;
    }
    else {
        return first;
    }
}