Czytam artykuł z Wikipedii na temat Hindley–Milner Type Inference próbując zrozumieć. Do tej pory to właśnie zrozumiałem:Zrozumienie wielościpów w Hindley-Milner Typ Wnioskowanie
- Typy są klasyfikowane jako monotypy lub poliakty.
- Monotypy są dalej klasyfikowane jako stałe typu (np.
int
lubstring
) lub zmienne typu (takie jakα
iβ
). - Stałe mogą być typu betonu (np.
int
istring
) lub konstruktorów typów (takich jakMap
iSet
). - Zmienne typu (takie jak
α
iβ
) zachowują się jak symbole zastępcze dla konkretnych typów (np.int
istring
).
Teraz mam trochę trudności ze zrozumieniem polytypes ale po naukę trochę Haskell jest to, co mam zrobić z nim:
- Rodzaje sami mają typy. Formalne typy typów są nazywane rodzajami (tj. Istnieją różne rodzaje typów).
- rodzaje betonu (jak
int
istring
) i typ zmiennych (jakα
iβ
) są od rodzaju*
. - typu konstruktory (jak
Map
iSet
) są lambda abstrakcje rodzajów (npSet
jest rodzaju* -> *
iMap
jest rodzaju* -> * -> *
).
To, czego nie rozumiem, to co oznaczają kwalifikatory. Na przykład co reprezentuje ∀α.σ
? I nie wydaje się, aby monetą z niego i bardziej czytam dodaje się ustęp bardziej zdezorientowany uzyskać:
Funkcja z polytype ∀α.α -> α przez kontrast może odwzoruj dla siebie każdą wartość tego samego typu, a wartość identity function jest wartością dla tego typu. Jako inny przykład: ∀α. (Set α) -> int to typ funkcji odwzorowującej wszystkie zbiory skończone na liczby całkowite. Liczba członków jest wartością dla tego typu. Zauważ, że kwalifikatory mogą pojawiać się tylko na najwyższym poziomie, np. Na przykład typ ∀α.α -> ∀α.α jest wykluczony przez składnię typów i te monotypy są zawarte w typach, więc typ ma ogólny formularz ∀α₁. . . ∀αₙ.τ.
Jeśli chodzi o kwantyfikację typu w Haskell, [przegląd typów egzystencjalnych] (http://www.haskell.org/haskellwiki/Existential_types) może stać się wartościowym odkryciem. – ulidtko
Wnioskowanie o typ dla Systemu F jest nierozstrzygalne, ale sprawdzenie typu jest łatwe (jeśli przez sprawdzanie typu rozumiemy, że terminy są opatrzone przypisami typów, a my po prostu sprawdzamy, czy te adnotacje mają sens). – augustss
@augustss Poprzez typechecking rozumie się, że dostajesz nieobjęte adnotacją pojęcie (styl Curry) i typ, i powinieneś określić, czy termin jest zgodny z typem czy nie. Jest to również nierozstrzygalne, o czym świadczy Joe Wells w [Sprawdzanie charakterystyki i typu w rachunku lambda drugiego rzędu są równoważne i nierozstrzygalne] (http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1. 1.31.3590). –