2010-09-04 20 views
16

Szukam informacji o znanym Damas-Hindley-Milner algorithm do wnioskowania o typ dla języków funkcjonalnych, szczególnie informacji o implementacji.Implementacja algorytmu oceny typu Damasa-Hindleya-Milnera

Już wiem, jak wykonać Algorithm W, ale słyszałem o ostatnich nowych algorytmów opartych na generatorze/rozwiązaniu ograniczenia zamiast zwykłej unifikacji. Nie mogę jednak znaleźć odpowiedzi na temat wdrożenia nowego algorytmu.

Jakiś pomysł, w którym mógłbym znaleźć częściowe informacje na temat wnioskowania o ML?

+0

Are jesteś pewien, że tworzenie/rozwiązywanie ograniczeń nie było dla systemów typu z podtypem, np jedna z rodzin HM (X) (Hindley-Milner sparametryzowana przez relację podtypu)? –

+0

Przeczytałem, że można go użyć dla rodziny HM (X) z podtypem, ale także dla rzeczy takich jak klasy typów (polimorfizm parametryczny), więc jestem nieco zaintrygowany – Vinz

+0

Klasy typów są w pewnym stopniu prostopadłe do polimorfizmu parametrycznego. Myślę, że Pascal Cuoq może być poprawny. Nie jestem pewien, czy widziałem na przykład poważną alternatywę dla generowania i zjednoczenia wiązań dla rekonstrukcji typu w Standard ML. Alternatywne podejścia z pewnością przydałyby się w przypadku proponowanych rozszerzeń. – Gian

Odpowiedz

15

Jeśli nie masz nic przeciwko kodowaniu ML, najlepszym sposobem na znalezienie tych rzeczy jest po prostu przyjrzenie się implementacjom w środowisku naturalnym. Dobrą implementacją referencyjną jest HaMLet, która jest zaprojektowana raczej jako platforma testowa niż implementacja produkcyjna.

Prawie wszystkie poważne niedawne dyskusje na te tematy znajdą się w miejscach akademickich. Jednym z artykułów, które mogą być interesujące, jest Generalising Hindley-Milner type inference algorithms.

Również implementacje różnych systemów typu (w tym niech polimorfizm) w Pierce'a „Types and Programming Languages”, a także Appel w „Modern Compiler Implementation in ML” ściślej dopasować nowoczesne podejście do realizacji tego niż opis waniliowym algorytmu W.

+0

dzięki za odesłanie do HaMLeta, nie wiedziałem, że taki projekt istnieje! – Vinz

+0

@ Vinc, tak, jest całkiem schludny. Związane jest to z niektórymi z (pozornie nieistniejącymi) pracami nad następcą ML. – Gian

+0

Spotkałem się z tym na drugi dzień - dotyczy on zasad obsługi więzów z wnioskami typu z klasami typów: http://arxiv.org/abs/cs/0006034 – Gian