Usually the most significant comparators come first, so it's confusing to see base as an optional argument which much come last. Also, I don't understand why it'd be optional. I think this method should just take a list of comparators where each one breaks any ties resulting from evaluating all the previous ones.