Comment by Pay08

7 hours ago

What are different things?

Eli5:

Haskell type classes are not classes (like Java or PHP classes); they are comparable to Rust traits -- which are different from PHP traits which are comparable to Java/C# interfaces (with default impls; if you just want contracts you have... PHP interfaces).

A fundamental difference is that you can instantiate/implement a type class (or Rust trait) for any* type, compared to interfaces where each class declares the interfaces it implements. You can therefore create generic (forall) instances, higher kinded type classes, etc.

  • That conflates type classes with extension types, in type theory.

    Actually in modern Java you can simulate type classes approach with a mix of interfaces and default methods implementations.

    In C# you can have the experience more straightforward with extensions types introduced in C#13.

    Then we have yet another way to approach type classes in Scala, with traits and implicits.

    And so on, as I haven't yet run out of examples.

    • > Actually in modern Java you can simulate type classes approach with a mix of interfaces and default methods implementations.

      Can you? The beauty of traits/type classes is that you can attach them to any type - in a world where 90% of the functionality of any piece of software is supplied by dependencies - external types which you cannot change - this is a vital feature.