Some midwit tried to be clever, and other midwits applauded. The top story on Lobsers.
https://lobste.rs/s/y13fa3/poor_man_s_types
Replying with the Djikstra “presense, not the absense” quote would be too easy.
There are two principal distinctions. First how type-classes (in Haskell) can formalize and systematize so-called duck-typing (walks like a duck, quacks like a duck) for the most general mathematical notions, such as equality, ordering, etc. This alone would have been enough to ever rise this bullshit again.
There is, however, more than that. Second, types aren’t just mere sets of values (with a set of a meaningful operations on values associated to it – the basic building blocks of abstract algebra – recurringly emerging patterns, properly captured as abstract notions – Group, Ring, Field, etc). This is just the most basic construct.
There is a notion (related to the set-subset relation) which we call “general-specific”, or specialization in general. Type-constructors produce or “specialize” types by taking type-parameters (type-variables) as arguments. But this alone would be not interesting enough.
The actual “enlightenment” comes after realization that a set of constraints (as being an instance of a particular type-class) can be added for a given type-variable(s), and this, of, course, corresponds to the mathematical qualifier “such that” at the level of an abstract algebra of types (or at the level of interfaces, which are sets of related type-signatures).
Notice, that this is “the best thing we can do” with types, and this has been discovered, not invented – has been properly generalized from [emergent structure of] Mathematics itself.
One more time, the notion of a general-specific at the level of interfaces is a whole “horizontal” dimension, and the additional (well-defined) constraints imposed by type-classes is the “third” one.
This is only the declarative aspect. There are also currying and partial application of type-constructors, which is a whole new level of abstraction on that “third” dimension.
Of course, everything can be abused and misused to the point of ridicule, so just focus of how the universal mathematical notions have been formalized in Haskell using type classes and type-constructors.
This was not arbitrary, it captured some common abstract structure which is prior to it.
May be you can see this “What Is -> Patterns -> Mathematics -> Lambda Calculus -> Types -> Type-Classes -> Type-Level lambdas”.