as others have already said Haskell's type system is more powerful. however more powerful does not always mean superior. Java strikes a balance between flexibility and ease-of-understanding, whereas Haskell allows you to construct the most convoluted mathematical abstractions imaginable. which is probably why Java is so popular in the enterprise and why many successful newer languages essentially copy its type system.