Ci sono due casi importanti in cui l'inclusione di uno forall
fa la differenza. Il primo è che la posizione di un forall
può cambiare il significato di un tipo - se si trova a sinistra di una freccia, significa che un argomento per la funzione è "più polimorfico" di altrimenti. Questa differenza è fondamentale; tuttavia, non sembra applicarsi qui.
La seconda differenza è una sintattica (ma non fondamentali) uno, vale a dire: in presenza di ScopedTypeVariables
, variabili legate da un forall
aprire una portata di battitura, mentre le variabili implicitamente legate senza forall
no. Pertanto, nel corpo di vreplicate
, è possibile utilizzare le variabili di tipo a
e n
ed assicurarsi che si riferiscano agli stessi tipi menzionati nella firma di vreplicate
. Senza il forall
(o senza ScopedTypeVariables
), utilizza di a
e n
nel corpo del vreplicate
introdurrebbe freschi variabili universalmente quantificate, e sarebbe responsabilità del programmatore per assicurarsi che sono stati unificati con i tipi nella firma di vreplicate
se questo erano desiderati Ulteriori dettagli sono disponibili in the documentation.
Senza leggere attentamente il documento non posso esserne sicuro, ma scommetto fortemente che quest'ultimo sta accadendo qui.
fonte
2015-11-06 22:41:36
Ho la mia stessa impressione. Se la carta è pesante per la matematica, potrebbero semplicemente usare la notazione esplicita per il gusto di essere espliciti. – Carcigenicate
@Carcigenicate In realtà, no, c'è una differenza se si tenta di compilare. Con 'ScopedTypeVariables', funziona con' forall' ed errori senza. Codice nel caso in cui sei interessato: https://gist.github.com/anonymous/b288970d38595be68229 – Ana