Comments 12
О да, вывод типов в окамле — это то, что меня всегда радовало.
+6
Работает алгоритм действительно потрясающе.
Даже нет особого желания разбираться с тем, как он работает.
Даже нет особого желания разбираться с тем, как он работает.
0
А существуют случаи, когда алгоритм не может вывести тип и пользователю придется править код самостоятельно?
+1
Только если такого типа нет. Во всех остальных случаях алгоритм выводит наиболее общий тип выражения. Другое дело, что иногда требуется определить для выражения более конкретный тип (если более общий не подходит семантически). Тогда его задают вручную.
+3
Подробно алгоритм описан в статье Р.Душкина «Модель типизации Хиндли — Милнера и пример её реализации на языке Haskell» в 5-м выпуске журнала «Практика функционального программирования»
+4
Спасибо за хороший перевод хорошей статьи.
Когда я впервые заинтересовался этим алгоритмом, статья Даниэля Спивака мне очень помогла понять основы, и облегчила понимание более формального описания алгоритма.
Когда я впервые заинтересовался этим алгоритмом, статья Даниэля Спивака мне очень помогла понять основы, и облегчила понимание более формального описания алгоритма.
+1
Не раскрыта тема наследования. По крайней мере F# при коде насыщенном иерархиями наследования/коваринатностью ведет себя очень глухо (http://www.rsdn.ru/forum/decl/3789317.1.aspx)
В Nemerle ситуация лучше, вот о его алгоритме было бы интереснее почитать.
В Nemerle ситуация лучше, вот о его алгоритме было бы интереснее почитать.
0
>> множество ограничей
Опечатка?
Опечатка?
+1
Мой друг без аккаунта на Хабре попросил запостить следующее (надеюсь, что это не является нарушением правил, поскольку песочницы для комментариев нет):
Алгоритм вывода для систем типов Хиндли-Милнера был придуман Дамасом и Милнером. Он подходит для некоторого ряда систем типов, которые обладают общими свойствами. Оригинальная система типов, с которой работали Хиндли и Милнер была простое типизированное лямбда-исчисление. Современные алгоритмы вывода типов в языках Haskell, Ocaml, Standard ML хоть и предназначены для работы с более мощными системами типов, в основе содержат тот же алгоритм.
Язык Scala же, напротив, имеет систему типов, для которой вывод типов по этому алгоритму невозможен. Поэтому она использует другой алгоритм, он придуман Пирсом (local type inference) и улучшен Одерским (colored local type inference). Поэтому иллюстрировать текст про алгоритм Хиндли-Милнера примерами на Скале нехорошо. Спиваку об этом, кстати, несколько раз написали в комментариях к исходному посту. Он ответил, что да, он это сейчас понимает, но на момент написания текста (2008-й год) он этого не знал и текст уже переделывать не станет.
Алгоритм вывода для систем типов Хиндли-Милнера был придуман Дамасом и Милнером. Он подходит для некоторого ряда систем типов, которые обладают общими свойствами. Оригинальная система типов, с которой работали Хиндли и Милнер была простое типизированное лямбда-исчисление. Современные алгоритмы вывода типов в языках Haskell, Ocaml, Standard ML хоть и предназначены для работы с более мощными системами типов, в основе содержат тот же алгоритм.
Язык Scala же, напротив, имеет систему типов, для которой вывод типов по этому алгоритму невозможен. Поэтому она использует другой алгоритм, он придуман Пирсом (local type inference) и улучшен Одерским (colored local type inference). Поэтому иллюстрировать текст про алгоритм Хиндли-Милнера примерами на Скале нехорошо. Спиваку об этом, кстати, несколько раз написали в комментариях к исходному посту. Он ответил, что да, он это сейчас понимает, но на момент написания текста (2008-й год) он этого не знал и текст уже переделывать не станет.
+5
Sign up to leave a comment.
Просто о Хиндли-Милнере