Presumably there are other implementations as well. I know, but I
lost the references, that some people worked on such constructs in
Clean, where the type class structure is a bit different than in
Haskell, some generalizations are easier to implement.