Материал для изучения ГАДТ - PullRequest
14 голосов
/ 26 октября 2010

Я начал читать о GADT в Haskell Wiki, но мне было не совсем удобно его понимать.Вы рекомендуете отдельную главу книги или сообщение в блоге, объясняющее GADT для новичка на Haskell?

Ответы [ 4 ]

16 голосов
/ 26 октября 2010

Apfelmus сделал видеоурок для GADT , который может быть полезным.

6 голосов
/ 26 октября 2010

Мне нравится пример в руководстве по GHC .Это просто и иллюстрирует некоторые ключевые моменты:

  • GADT позволяют использовать систему типов 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 для моделирования вашей проблемы , чтобы полезные функции, которые вы хотите написать, были хорошо напечатаны.

1 голос
/ 01 августа 2012

Wiki на Haskell GADT для чайников - лучшее объяснение, которое я видел.

Проблема, с которой я (и я подозреваю других) в большинстве представлений, состоит в том, что они показывают примеры GADT с точки зрения синтаксиса, который неочевиден , пока вы не поймете GADT . Это делает простейшие примеры, на которых все построено, особенно сложным для полного понимания - вы можете догадаться о том, что делают многие шаблоны, но понять точную роль каждого утверждения сложно.

Пост "для чайников" анализирует и наращивает смысл синтаксиса на пути объяснения его собственных базовых примеров, что делает его гораздо более полезной отправной точкой. Я очень рекомендую это.

1 голос
/ 26 октября 2010
...