Does Haskell erase types, and if so, in what ways is this similar/dissimilar to the type erasure that occurs in Java?
C and Pascal have type erasure. Java lets you inspect classes at run-time - even dynamically loaded ones!
What Haskell does is much closer to Pascal than to Java.