"现代"HList?

Jac*_*tte 30 haskell record

HList包是基于什么是现哈斯克尔技术.简单的问题是:鉴于过去8年Haskell/GHC开发的所有新功能,"现代"HList的构建方式会有很大不同吗?我意识到这里的答案可能不是,对于HList的特定情况,使用的技术仍然可以产生最优雅的解决方案.

我已经阅读了可扩展记录页面上记录的许多项目,唯一真正的竞争对手(即实现为hackage上可用库的一个)是记录包.或者是否有可扩展记录的链接?

Chr*_*icz 11

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

较新的GHC特征(GADT,相关类型,约束类型,多态类型,单例类型)可能允许稍微不同的权衡.特别是单例类型可以允许更好的标签,并且多态类型可以允许更优雅的Typeable/Data/Generics.

您链接到的"记录"包取决于声明的"种类"包:

"Haskell不支持subkinds和subkind多态.但是,这个包可以用来模拟subkinds of kind*和subkind变量."

但是,由于在新的GHC版本中将数据类型推广到各种类型,这已不再适用.因此,2012年1月的套餐现在可能已经过时了.

至于记录,也许一个新的系统将从最新一轮的多态镜头中汲取:镜头和/或镜头系列.

  • 我今天早上和Russell(奥康纳)讨论了镜头与可扩展记录之间的关系 - 目前尚不清楚.镜头非常适合抽象聚合中单个字段的get/set,但不太适合表示聚合本身.在任何情况下,似乎我应该坚持使用HList(现在),然后尝试找出我应该选择哪种变种来处理手头的问题(这是翻译一些使用多态的O'Caml代码)变体和行类型和函数到Haskell). (2认同)
  • 我最近做了一个HList启发的事情:给定一个类型索引副产品(TIP)的东西和{其中一个案例的处理程序}它返回{处理程序的结果}或{具有较小类型的TIP}.链接处理程序与> =>一起减少了TIP.我当时认为它模拟了模式匹配的多态变体. (2认同)