Nel libro di Graham Hutton "Programming in Haskell", definisce una funzione polimorfica , se il suo tipo "contiene una o più variabili di tipo". Definisce quindi una funzione come sovraccaricata , se il suo tipo "contiene uno o più vincoli di classe".
Da queste definizioni, la mia domanda è, "può una funzione essere polimorfa e sovraccaricata ?".
Ad esempio, la funzione elem
nel preludio standard, ha essenzialmente un tipo di Eq a => [a] -> Bool
. Possiamo dire che questa funzione è sia polimorfa che sovraccaricata ?
EDIT:
Graham Hutton ha dichiarato: "Dato che i vincoli di classe possono essere utilizzati solo per digitare variabili, la mia risposta sarebbe sì, una funzione può essere chiamata sia polimorfa sia sovraccarica.In particolare, qualsiasi funzione sovraccaricata è da queste definizioni anche polimorfica. Posso capire perché qualcuno potrebbe desiderare di mantenere una distinzione tra questi due termini: per gli scopi del libro volevo avere definizioni chiare e semplici. "
Pagina Wiki Haskell , afferma che elem
è un esempio di "polimorfismo ad-hoc", mentre qualcosa come id :: a -> a
, è un esempio di "polimorfismo parametrico".