Sono abbastanza sicuro che tutti abbiano familiarità con i metodi generici del modulo:
T DoSomething<T>(T item)
Questa funzione è anche chiamata parametricamente polimorfica (PP), in particolare rank-1 PP.
Diciamo che questo metodo può essere rappresentato usando un oggetto funzione del modulo:
<T> : T -> T
Cioè, <T>
significa che prende un parametro di tipo, e T -> T
significa che prende un parametro di tipo T
e restituisce un valore dello stesso tipo.
Quindi la seguente sarebbe una funzione di grado 2 di livello:
(<T> : T -> T) -> int
La funzione non accetta parametri di tipo stesso, ma accetta una funzione che accetta un parametro di tipo. Puoi continuare a farlo in modo iterativo, rendendo il nesting sempre più profondo, ottenendo PP di livello sempre più alto.
Questa funzione è davvero rara tra i linguaggi di programmazione. Persino Haskell non lo consente per impostazione predefinita.
È utile? Può descrivere comportamenti difficili da descrivere altrimenti?
Inoltre, cosa significa che qualcosa deve essere impredicativo ? (in questo contesto)