HList package基于现在的古代 Haskell技术。简单的问题是:鉴于过去8年Haskell / GHC开发的所有新功能,“现代”HList的构建方式会有很大不同吗?我意识到这里的答案可能是没有,对于HList的特定情况,使用的技术仍然可以产生最优雅的解决方案。
我已经阅读了extensible records页面上记录的许多项目,唯一真正的竞争对手(即实施为hackage上可用的库)是records package。或者是否遗漏了extensible records的链接?
答案 0 :(得分:11)
任何这些包装的问题都是其目标的范围。 HList实际上是5种不同的标签实现,两种类型相等,两种类型转换,两种Record / RecordP,以及Variant vs TIC选择。所有这些都是相似的,但在使用的易用性,可移植性和扩展方面有不同的权衡。
较新的GHC功能(GADT,相关类型,约束类型,多态类型,单例类型)可能允许稍微不同的权衡。特别是单例类型可以允许更好的标签,多态类型可以允许更优雅的Typeable / Data / Generics。
您链接到的“记录”包取决于声明的“种类”包:
“Haskell不支持subkinds和subkind多态。 但是,此包可用于模拟类型*和 subkind变量。“
但是,由于在新的GHC版本中将数据类型提升为各种类型,因此不再适用。所以2012年1月的套餐现在可能已经过时了。
至于记录,也许新系统会从最新一轮的多态镜头中得出:lens和/或lens-family。