Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell &引用;“现代”;名单?_Haskell_Record - Fatal编程技术网

Haskell &引用;“现代”;名单?

Haskell &引用;“现代”;名单?,haskell,record,Haskell,Record,这项技术是基于现在古老的哈斯克尔技术。简单的问题是:考虑到过去8年Haskell/GHC开发的所有精彩新功能,“现代”HList的构建会有很大不同吗?我意识到这里的答案很可能是否定的,对于HList的特殊情况,当时使用的技术仍然可以产生最优雅的解决方案 我已经阅读了页面上记录的许多项目,唯一真正的竞争对手(即在hackage上实现为库的项目)是。或者是否缺少来自的链接?这些包中任何一个的问题都是其目标的范围。HList实际上是5种不同的标签实现,两种是类型相等,两种是类型转换,两种是Record

这项技术是基于现在古老的哈斯克尔技术。简单的问题是:考虑到过去8年Haskell/GHC开发的所有精彩新功能,“现代”HList的构建会有很大不同吗?我意识到这里的答案很可能是否定的,对于HList的特殊情况,当时使用的技术仍然可以产生最优雅的解决方案


我已经阅读了页面上记录的许多项目,唯一真正的竞争对手(即在hackage上实现为库的项目)是。或者是否缺少来自的链接?

这些包中任何一个的问题都是其目标的范围。HList实际上是5种不同的标签实现,两种是类型相等,两种是类型转换,两种是Record/RecordP,以及Variant vs TIC choice。在易用性、可移植性和所使用的扩展方面,所有这些都是相似但不同的权衡

较新的GHC特性(GADT、关联类型、约束类型、多态类型、单例类型)可能允许稍微不同的权衡。特别是单例类型可能允许更好的标签,多态类型可能允许更优雅的可类型化/数据/泛型

您链接到的“记录”包取决于声明以下内容的“种类”包:

“Haskell不支持子类和子类多态性。 然而,这个包可以用来模拟种类*和*的子种类 子类变量。”

但由于在新的GHC版本中将数据类型升级为种类,这一点不再正确。因此,2012年1月的一揽子计划现在可能有点过时了


至于记录,也许一个新的系统将借鉴最新一轮的多态透镜:和/或。

我今天上午刚刚与Russell(O'Connor)讨论了透镜和可扩展记录之间的关系,现在还不清楚。透镜非常适合抽象聚合中单个字段的get/set,但不太适合表示聚合本身。在任何情况下,我似乎应该坚持使用HList(现在),然后尝试找出我应该选择的无数变体中的哪一个来处理手头的问题(这是将一些使用多态变体、行类型和函子的O'Caml代码翻译成Haskell).我最近做了一件受HList启发的事情:给定一个类型索引的副产品(TIP)和{handler for the case},它返回{the result of the handler}或{the TIP with a small type}。将处理程序与>=>链接在一起,可以逐个减少提示。我当时认为这是一种模拟模式匹配多态变体。