In Haskell sind diese drei Dinge unabhängig
class C where { m :: ... }
data T = ...
instance C T where { m = ... }
In Java sind 2 und 3 nur gemeinsam möglich
class T implements C { ... }
Das ist an einigen Stellen nachteilig
und erfordert Bastelei: wenn class T implements Comparable<T>
,
aber man die T-Objekte anders vergleichen will?
Man kann deswegen oft die gewünschte Vergleichsfunktion separat an Sortier-Prozeduren übergeben.
...natürlich nicht die Funktion selbst, Java ist ja nicht funktional, sondern ihre Verpackung als Methode eines Objekts einer Klasse, die
interface Comparator<T> { int compare(T o1, T o2); }implementiert.