×

Haskell中使用嵌套类型编程的原则方法。 (英语) Zbl 1183.68141号

摘要:初始代数语义是现代函数式编程语言理论的基石之一。对于每个归纳数据类型,它为该类型提供Church编码{建造}构造该类型数据的组合符{折叠}对该类型的数据封装结构化递归的组合符,以及{折叠/构建}通过从模块化程序中删除使用{建造}组合器,并立即使用{折叠}组合器,用于该类型。长期以来,人们一直认为初始代数语义的表达能力不足,无法为Haskell中的嵌套类型编程提供类似的基础。具体来说,标准{折叠}源于初始代数语义的s被认为太弱,无法捕获Haskell中嵌套类型数据上常见的递归模式,并且没有{建造}组合器或{折叠/构建}到目前为止,已经为嵌套类型定义了规则。本文显示了标准{折叠}事实上,对于使用Haskell中的嵌套类型进行编程来说,s具有足够的表达能力。它还定义了{建造}组合子和{折叠/构建}嵌套类型的融合规则。因此,它展示了初始代数语义如何为使用Haskell中的嵌套类型进行编程提供原则性、表达性和优雅的基础。

MSC公司:

68甲15 编程语言理论
PDF格式BibTeX公司 XML格式引用
全文: 内政部

参考文献:

[1] Abel,A.、Matthes,R.、Uustalu,T.:高阶和嵌套数据类型的迭代和叠置方案。西奥。计算。科学。333(1–2), 3–66 (2005) ·Zbl 1070.68093号 ·doi:10.1016/j.tcs.2004.10.017
[2] Altenkirch,T.,Reus,B.:使用广义归纳类型的lambda项的单数表示。In:程序。,计算机科学逻辑,第453-468页(1999)·兹比尔0944.03011
[3] Bainbridge,E.S.,Freyd,P.J.,Scedrov,A.,Scott,P.J.:功能多态性。西奥。计算。科学。70(1), 35–64 (1990). 71(3)、431(1990)勘误表·Zbl 0717.18005号 ·doi:10.1016/0304-3975(90)90151-7
[4] Bayley,I.:对嵌套数据类型的通用操作。牛津大学博士学位论文(2001年)
[5] Bird,R.,Meertens,L.:嵌套数据类型。In:程序。,程序构造数学,第52-67页(1998年)
[6] Bird,R.,Paterson,R.:de Bruijn表示法作为嵌套数据类型。J.功能。程序。9(1), 77–91 (1999) ·Zbl 0926.68025号 ·doi:10.1017/S0956796899003366
[7] Bird,R.,Paterson,R.:嵌套数据类型的一般折叠。表Asp。计算。11(2),200–222(1999年)·Zbl 0937.68027号 ·doi:10.1007/s001650050047
[8] Blampied,P.:非一致数据类型的结构化递归。诺丁汉大学博士论文(2000年)
[9] Dybjer,P.:归纳家庭。表Asp。计算。6(4), 440–465 (1994) ·Zbl 0808.03044号 ·doi:10.1007/BF01211308
[10] Fiore,M.,Plotkin,G.D.,Turi,D.:抽象语法和变量绑定。In:程序。,《计算机科学中的逻辑》,第193-202页(1999年)
[11] Ghani,N.,Uustalu,T.,Vene,V.:建造、增援和摧毁。普遍性。In:程序。,亚洲程序设计语言研讨会,第327-347页(2003年)·Zbl 1116.68490号
[12] Ghani,N.,Johann,P.,Uustalu,T.,Vene,V.:单分子膜增强和广义短程融合。In:程序。,函数式编程国际会议,第294-305页(2005年)·Zbl 1302.68079号
[13] Ghani,N.,Haman,M.,Uustalu,T.,Vene,V.:将循环结构表示为嵌套类型。发表于《函数编程趋势》(2006)
[14] 腮。,答:非严格函数语言的廉价砍伐。格拉斯哥大学博士学位论文(1996年)
[15] Gill,A.,Launchbury,J.,Peyton Jones,S.L.:毁林捷径。In:程序。,函数编程语言与计算机体系结构,第223-232页(1993年)
[16] Hinze,R.:嵌套数据类型上的多类型函数。离散数学。西奥。计算。科学。3(4), 193–214 (1999) ·Zbl 0947.68031号
[17] Hinze,R.:高效广义褶皱。In:程序。,通用编程研讨会,第1-16页(2000年)
[18] Hinze,R.:功能明珠:完美树和位遍历排列。J.功能。程序。10(3), 305–317 (2000) ·Zbl 0957.68027号 ·doi:10.1017/S0956796800003701
[19] Hinze,R.:泛型函数编程的新方法。在:过程中。,《程序设计语言原理》,第119–132页(2000年)·Zbl 1323.68122号
[20] Hinze,R.:制造数据类型。J.功能。程序。11(5), 493–524 (2001) ·Zbl 0994.68045号
[21] Hinze,R.,Juering,J.:通用Haskell:应用程序。收录:《通用编程:高级讲座》,第57–97页(2003年)
[22] Hughes,R.J.M.,Swierstra,S.D.:波兰解析器,一步一步。In:程序。,函数式编程国际会议,第239-248页(2003年)·兹比尔1315.68075
[23] Jansson,P.,Juering,J.:PolyP——一种多类型编程语言扩展。In:程序。,《程序设计语言原理》,第470-482页(1997年)
[24] Johann,P.:短程融合的推广及其正确性证明。高阶符号。计算。15, 273–300 (2002) ·Zbl 1020.68022号 ·doi:10.1023/A:1022982420888
[25] Johann,P.,Ghani,N.:初始代数语义就足够了!In:程序。,《打字Lambda演算与应用》,第207-222页(2007年)·兹比尔1215.68138
[26] Johann,P.,Ghani,N.:GADT结构化编程基础。In:程序。,《程序设计语言原理》,第297–308页(2008年)·Zbl 1295.68151号
[27] MacLane,S.:工作数学家的类别。柏林施普林格(1971)·Zbl 0705.18001号
[28] Martin,C.,Gibbons,J.,Bayley,I.:嵌套数据类型的规则化有效广义折叠。表Asp。计算。16(1), 19–35 (2004) ·Zbl 1084.68075号 ·doi:10.1007/s00165-003-0013-6
[29] McBride,C.,McKinna,J.:左侧视图。J.功能。程序。14(1), 69–111 (2004) ·Zbl 1069.68539号 ·doi:10.1017/S0956796803004829
[30] Mycroft,A.:多态类型方案和递归定义。In:程序。,国际编程研讨会,第217–228页(1984年)·Zbl 0548.68010号
[31] Okasaki,C.:纯功能数据结构。剑桥大学出版社,剑桥(1998)·兹伯利0941.68032
[32] Peyton Jones,S.L.:Haskell 98语言与图书馆:修订报告。剑桥大学出版社,剑桥(2003)·Zbl 1067.68041号
[33] Pitts,A.:参数多态性和操作等效性。数学。结构。计算。科学。10, 1–39 (2000) ·Zbl 0955.68024号 ·doi:10.1017/S0960129500003066
[34] Pitts,A.:参数多态性、递归类型和操作等价。未出版手稿·Zbl 0925.68081号
[35] Plotkin,G.,Power,J.:计算概念决定单子。在:过程中。,软件科学和计算结构基础,第342-356页(2002)·Zbl 1077.68676号
[36] Smyth,M.B.,Plotkin,G.:递归区域方程的分类理论解。SIAM J.计算。11(4), 761–783 (1982) ·Zbl 0493.68022号 ·数字对象标识代码:10.1137/021162
[37] Takano,A.,Meijer,E.:计算形式的快捷砍伐森林。in:Proc。,函数编程语言与计算机体系结构,第306–313页(1995年)·Zbl 0939.68556号
[38] Uustalu,T.,Vene,V.:门德尔式归纳类型。Nord.J.计算。6(3),343–361(1999年)·Zbl 0937.68029号
[39] Wehr,M.:非均匀递归:解决方案(折叠的最小排序)。网址:www.citeseer.ist.psu.edu/wehr00uniform.html
此参考列表基于出版商或数字数学图书馆提供的信息。其项与zbMATH标识符进行启发式匹配,可能包含数据转换错误。在某些情况下,zbMATH Open的数据对这些数据进行了补充/增强。这试图尽可能准确地反映原始论文中列出的参考文献,而不要求完整或完全匹配。