Its often hear that Haskell(which I don't know) has a very interesting type system.. I'm very familiar with Java and a little with C#, and sometimes it happens that I'm fighting the type system so some design *accommodates* or works better in a certain way. 

That led me to wonder...

What are the problems that occur somehow because of deficiencies of Java/C# type system?
How do you deal with them?