    "Given a stream of [[Comparable]] values, return the largest
     value in the stream, or `null` if the stream is empty.

     For any nonempty stream `it`, `max(it)` evaluates to the
     first element of `it` such that for every element `e` of
     `it`, `max(it) >= e`.

     Note that [[Iterable.max]] may be used to find the largest
     value in any stream, as determined by a given comparator
     function."
    see (`interface Comparable`,
         `function min`,
         `function largest`,
         `function Iterable.max`)
    shared Absent|Value max<Value,Absent>
            (Iterable<Value,Absent> values)
            given Value satisfies Comparable<Value>
            given Absent satisfies Null {
        value it = values.iterator();
        if (!is Finished first = it.next()) {
            variable value max = first;
            while (!is Finished val = it.next()) {
                if (val>max) {
                    max = val;
                }
            }
            return max;
        }
        else {
            "iterable must be empty"
            assert (is Absent null);
            return null;
        }
    }