record WithLesser[T, F](x:T); [T,F] overload lesser?(a:WithLesser[T,F], b:WithLesser[T,F]) = F(a.x, b.x); [S, LesserComparator] sortBy(sequence:S, static LesserComparator) { alias T = SequenceElementType(S); sort(mapped( x => ref Pointer[WithLesser[T, LesserComparator]](&x)^, sequence, )); } main() { var a = [1, 2, 3, 4, 5]; sortBy(a, (x, y) => (-x < -y)); println(a); }