2012-03-01 9 views

risposta

10

Qualsiasi cosa implichi un polimorfismo di livello superiore (vale a dire "di prima classe"). Ad esempio:

lambda f : (forall A. A -> A). (f Int 1, f String "hello") 

Questa funzione avrebbe il tipo (forall A. A -> A) -> Int * String, che non esprimibile in HM, dove tutti i regimi di tipo polimorfici devono essere in "prenessa" forma (cioè il quantificatore può verificarsi solo all'esterno, non annidato).

+3

Non sai cosa intendi, quell'espressione non è una funzione. Le definizioni (rilegato via let) possono essere polimorfiche con HM, ma i parametri di funzione non possono. –

Problemi correlati