Full Haskell-like Type Class resolution in Java