Polimorfismo paramétrico vs Polimorfismo ad-hoc

Gostaria de entender a principal diferença entre o polimorfismo paramétrico, como o polimorfismo de classes / funções genéricas nas linguagens Java / Scala / C ++ e o polimorfismo "ad-hoc" no sistema do tipo Haskell. Estou familiarizado com o primeiro tipo de idiomas, mas nunca trabalhei com o Haskel

Mais precisamente

Como é o algoritmo de inferência de tipo, p. em Java diferente da inferência de tipo em Haskell? Por favor, dê-me um exemplo da situação em que algo pode ser escrito em Java / Scala, mas não em Haskell (de acordo com os recursos modulares dessas plataformas também) e vice-vers

Desde já, obrigado

questionAnswers(3)

yourAnswerToTheQuestion