Я начал читать о GADT в Haskell Wiki, но не чувствовал себя вполне комфортно, понимая это. Вы рекомендуете конкретную книгу или статью в блоге, объясняющую GADT для новичков Haskell?Материал для обучения GADT
ответ
Apfelmus изготовлен video tutorial for GADTs который может быть полезен.
Мне нравится пример в GHC manual. Это просто, и это иллюстрирует некоторые ключевые моменты:
GADTs позволяют использовать систему типов Haskell, чтобы смоделировать систему типов языка вы реализующего («язык объекта»)
Это позволяет Статическая проверка Haskell для утверждения, что ваш «компилятор проходит» или что-то не сохраняет тип. Функции, принимающие объектно-языковые термины, могут предполагать, что эти термины хорошо типизированы. Функции, возвращающие термины на языке объекта, необходимы для создания хорошо типизированных терминов.
Образец, соответствующий конструктору GADT, вызывает уточнение типа.
eval
имеет типTerm a -> a
в общем, но правая сторона дляeval (Lit i)
имеет типInt
, так как левый конструктор имел типTerm Int
.Система Haskell не заботится о том, какие типы вы дадите своим конструкторам GADT. Мы могли бы так же легко сделать каждый конструктор в
data Term a
дать результат типаTerm a
, илиTerm Bool
, и определениеdata
по-прежнему будет проходить. Но мы не сможем написатьeval :: Term a -> a
. Вы выбираете тип тегов GADT для модели вашей проблемы, так что полезные функции, которые вы хотите написать, хорошо типизированы.
Haskell вики GADTs for dummies лучшее объяснение, которое я видел.
Проблема, с которой я (и подозреваю других) в том, что они показывают примеры GADT в терминах синтаксиса, который неочевиден , пока вы не поймете GADTs. Это делает простейшие примеры, на которые все построено особенно сложно, чтобы полностью понять - вы можете догадаться о том, что делают многие из шаблонов, но понимание точной роли каждого утверждения является сложной задачей.
Сообщение «для манекенов» раскрывает и вырабатывает значение синтаксиса на пути к объяснению его собственных основных примеров, что делает его гораздо более полезной отправной точкой. Я очень рекомендую.
Вы прочитали это? http://www.haskell.org/haskellwiki/GADTs_for_dummies –
Хм нет. Это звучит многообещающе. Благодарю. – 2010-10-26 00:27:38