Scala: come definire i parametri di funzione “generici”?

Sto cercando di imparare Scala adesso, con un po ‘di esperienza in Haskell. Una cosa che mi è sembrata strana è che tutti i parametri di funzione in Scala devono essere annotati con un tipo, qualcosa che Haskell non richiede. Perchè è questo? Per provare a metterlo come un esempio più concreto: una funzione di aggiunta è scritta così:

def add(x:Double, y:Double) = x + y 

Ma, questo funziona solo per i doppi (beh, anche i lavori funzionano a causa della conversione implicita del tipo). Ma cosa succede se si desidera definire il proprio tipo che definisce il proprio operatore + . Come scriveresti una funzione di aggiunta che funzioni per qualsiasi tipo che definisce un operatore + ?