Una funzione può essere polimorfa e sovraccaricata?

3

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".

    
posta Ryan Smith 18.04.2016 - 17:38
fonte

2 risposte

0

Sì. Seguendo la definizione la risposta è banale. Se A = > B e C = > D, quindi A⋀C = > B⋀D

    
risposta data 18.04.2016 - 17:48
fonte
4

Una funzione "sovraccaricata" deve essere polimorfa, perché è impossibile scrivere un vincolo di classe a meno che la firma della funzione non contenga già una variabile di tipo. Basandomi su questo, non direi che overloaded è un concetto molto utile in Haskell.

    
risposta data 18.04.2016 - 19:05
fonte

Leggi altre domande sui tag