Я начал читать о 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. Это делает простейшие примеры, на которые все построено особенно сложно, чтобы полностью понять - вы можете догадаться о том, что делают многие из шаблонов, но понимание точной роли каждого утверждения является сложной задачей.
Сообщение «для манекенов» раскрывает и вырабатывает значение синтаксиса на пути к объяснению его собственных основных примеров, что делает его гораздо более полезной отправной точкой. Я очень рекомендую.
- 1. GADT для полиморфного списка
- 2. Последствия для использования GADT
- 3. makeLenses для GADT (Haskell)
- 4. Где я могу получить материал для обучения EBNF?
- 5. Смазываемые GADT
- 6. GADT определение
- 7. Полезный ресурс для обучения Фрагменты
- 8. Перечисление GADT в Haskell
- 9. Сайты для обучения/ссылки UML
- 10. Сравнение шаблонов с GADT
- 11. GADT по проверке
- 12. Образец соответствия GADT
- 13. Вектор, содержащий GADT
- 14. параметрический GADT от внешнего
- 15. GADT и доказательство равенства
- 16. возвращение типа GADT оценщика
- 17. GADT в полиморфной функции
- 18. Комбинировщик парсера Идриса GADT
- 19. Построение конкретных типов для моделей с GADT
- 20. Возможно ли создать экземпляр моноида для GADT?
- 21. Определение собственных экземпляров Typeable для GADT
- 22. Обновление данных обучения для контролируемого обучения - как?
- 23. База данных для обучения/обучения хранимых процедур
- 24. C# проекты для обучения во время обучения
- 25. Преобразование GADT без ограничений для другого GADT с ограничениями при наличии таких ограничений
- 26. Как разобрать строку в GADT
- 27. Как использовать GADT в объятиях
- 28. Преобразование GADT в типы фантомов
- 29. Справочный материал для uops?
- 30. Автономный материал для ткани?
Вы прочитали это? http://www.haskell.org/haskellwiki/GADTs_for_dummies –
Хм нет. Это звучит многообещающе. Благодарю. – 2010-10-26 00:27:38