Узага́льнений алгебри́чний тип да́них (англ.generalized algebraic data type, GADT) — один з видів алгебричних типів даних, який характеризується тим, що його конструктори можуть повертати значення не свого типу, пов'язаного з ним[1]. Створені під впливом робіт про індуктивні сімейства серед дослідників залежних типів[2].
Такі типи реалізовано в кількох мовах програмування, зокрема в мовах OCaml (починаючи від версії 4)[3], Idris[4], Agda[5] та Haskell, причому в останньому вони не входять до стандарту мови, а реалізовані лише в одному з розширень компілятора GHC. Мова Haskell імітує індуктивне сімейство[en], подаючи їх типами, індексованими іншими типами[5].
Рання версія узагальнених алгебричних типів даних, яку описали Леннарт Аугустсон і Кент Петерсон 1994 року, ґрунтувалася на зіставленні зі взірцем у системі доведення теорем ALF[7].
У сучасній формі GADT ввели 2003 року незалежно Чейні (Cheney) та Гінц (Hinze) і до цього Сі (Xi), Чен (Chen) і Ченом (Chen) як розширення алгебричних типів даних ML і Haskell[8][9]. Введені узагальнені типи виявилися еквівалентними один одному і схожі на індуктивні сімейства типів даних (або індуктивні типи даних), використовувані в Coq у численні конструкцій[10] .
2006 року розроблено розширені алгебричні типи даних, що поєднують узагальнені алгебричні типи даних з екзистенційними типами даних[en] та обмеженнями класу типів[en], які ввели Перрі (Perry), Ляуфер (Läufer) і Одерски в середині 1990-х.
↑ абhttps://dx.doi.org/10.1007/978-3-642-03359-9_6. Proceedings of the 22Nd International Conference on Theorem Proving in Higher Order Logics. TPHOLs '09. Munich, Germany: Springer-Verlag. 2009. с. 73—78. Процитовано 6 грудня 2013. {{cite conference}}: Пропущений або порожній |title= (довідка)
↑Hagiya, M. and Wadler, P. Functional and Logic Programming: 8th International Symposium, FLOPS 2006, Fuji-Susono, Japan, April 24-26, 2006, Proceedings. — Springer, 2006. — P. 17—18. — ISBN 9783540334385.
Література
Koopman, P.; Plasmeijer, R.; Swierstra, D. Advanced Functional Programming: 6th International School, AFP 2008, Heijen, The Netherlands, May 19-24, 2008, Revised Lectures. — Springer, 2009. — 331 p. — ISBN 9783642046513.
Xi, Hongwei; Chen, Chiyan; Chen, Gang. Guarded Recursive Datatype Constructors // Proceedings of the 30th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL'03). — ACM Press, 2003. — P. 224–235. — DOI:10.1145/604131.604150.
Sheard, Tim; Pasalic, Emir. Meta-programming with built-in type equality // Proceedings of the Fourth International Workshop on Logical Frameworks and Meta-languages (LFM'04), Cork. — 2004. — DOI:10.1016/j.entcs.2007.11.012.
Schmid, U. and Kitzelmann, E. and Plasmeijer, R. Approaches and Applications of Inductive Programming: Third International Workshop, AAIP 2009, Edinburgh, UK, September 4, 2009, Revised Papers. — Springer, 2010. — P. 114—115. — ISBN 9783642119309.
Peyton Jones, Simon; Vytiniotis, Dimitrios; Weirich, Stephanie; Washburn, Geoffrey.Simple Unification-based Type Inference for GADTs // Proceedings of the ACM International Conference on Functional Programming (ICFP'06), Portland. — 2006.
Schrijvers, Tom, Peyton Jones, Simon, Sulzmann, Martin, Vytiniotis, Dimitrios.Complete and Decidable Type Inference for GADTs // Proceedings of the ACM International Conference on Functional Programming (ICFP'09), Edinburgh. — 2009.