I believe at least in the case of Haskell, you are referring to type classes[0].
0 - https://wiki.haskell.org/OOP_vs_type_classes