type std { init(mut * any); deinit(mut * any); copy(mut * any, * any); move(mut * any, mut * any); } /* these as well could be way optimized for builtin types */ type comparable { equal(* any, * any) bool; less_than(* any, * any) bool; } /* I'm imagining that if someone provides a specific function for these, it will * be used rather than these ones, but that the minimum to implement comparable * is as small as possible this should be fine */ pub not_equal(a * comparable, b * comparable) bool { return !equal(a, b); } pub greater_than(a * comparable. b * comparable) bool { return !equal(a, b) && !less_than(a, b); } pub less_or_equal(a * comparable, b * comparable) bool { return !greater_than(a, b); } pub greater_or_equal(a * comparable, b * comparable) bool { return !less_than(a, b); }