Sto leggendo l'articolo di Wikipedia su Hindley–Milner Type Inference cercando di dare un senso a questo. Finora questo è quello che ho capito:Comprensione dei politipi in un'inferenza di tipo Hindley-Milner
- I tipi sono classificati come monotipi o politipi.
- I monotipi sono inoltre classificati come costanti di tipo (come
int
ostring
) o variabili di tipo (comeα
eβ
). - Le costanti di tipo possono essere tipi concreti (come
int
estring
) o tipi costruttori (comeMap
eSet
). - Le variabili di tipo (come
α
eβ
) si comportano come segnaposti per tipi di calcestruzzo (comeint
estring
).
Ora sto avendo un po 'di difficoltà a capire politipi ma dopo aver appreso un po' di Haskell questo è quello che farne:
- Tipi stessi hanno tipi. Formalmente tipi di tipi sono chiamati tipi (cioè ci sono diversi tipi di tipi).
- tipi di calcestruzzo (come
int
estring
) e digitare variabili (comeα
eβ
) sono di tipo*
. - Tipo costruttori (come
Map
eSet
) sono astrazioni lambda di tipo (per esempioSet
è di tipo* -> *
eMap
è di tipo* -> * -> *
).
Quello che non capisco è cosa significano i qualificatori. Ad esempio cosa rappresenta ∀α.σ
? Non riesco a fare testa o croce di esso e più leggevo il seguente paragrafo il più confuso ottengo:
Una funzione con polytype ∀α.α -> α per contro, può mappare qualsiasi valore dello stesso tipo su se stesso e il valore identity function è un valore per questo tipo. Come altro esempio ∀α. (Set α) -> int è il tipo di una funzione che associa tutti gli insiemi finiti a numeri interi. Il conteggio dei membri è un valore per questo tipo. Nota che i qualificatori possono apparire solo di livello superiore, ovvero un tipo ∀α.α -> ∀α.α per esempio, è escluso dalla sintassi dei tipi e che i monotipi sono inclusi nei politipi, quindi un tipo ha il generale modulo ∀α₁. . . ∀αₙ.τ.
Per quanto riguarda la quantificazione del tipo in Haskell, [la panoramica dei tipi esistenziali] (http://www.haskell.org/haskellwiki/Existential_types) può diventare una scoperta interessante. – ulidtko
L'inferenza di tipo per il sistema F è indecidibile, ma il controllo del tipo è facile (se per controllo del tipo intendiamo che i termini sono annotati con tipi e controlliamo solo che quelle annotazioni abbiano senso). – augustss
@august Con typechecking si intende che viene fornito un termine non annotato (stile Curry) e un tipo, e si deve determinare se il termine è conforme al tipo o meno. Anche questo è indecidibile, come dimostrato da Joe Wells in [Tipability e Type Checking nel secondo ordine lambda-Calculus sono equivalenti e indecidibili] (http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1. 1.31.3590). –