Interesting to compare to Haskell. Here you typically implement “compare” which is equivalent to the spaceship operator and get < &c for free, but you can implement “<=“ and get compare for free because the defaulting mechanism is general and not built into the compiler. Also “Ord” has to be compatible with “Eq” (which you can also get for free) which is different from C++’s approach. Moreover, the compiler can “derive” implementations for regular data objects.
C# is slightly different: all of the algorithms take an IComparison, which implements the spaceship operator in another class (you can implement the related IComparer in your actual class and it all works via the magic of reflection. This isn't too bad since the reflection only occurs in the constructor.). Comparison operators are basically never used in the standard library and people rarely implement them.