【问题标题】:"Modern" HList?“现代”HList?
【发布时间】:2012-08-18 05:04:07
【问题描述】:

HList package 基于现在古老 Haskell 技术。一个简单的问题是:考虑到过去 8 年 Haskell/GHC 开发的所有精彩新特性,“现代”HList 的构建方式会非常不同吗?我意识到这里的答案很可能是,对于 HList 的特殊情况,使用的技术仍然会产生最优雅的解决方案。

我已经阅读了 extensible records 页面上记录的许多项目,唯一真正的竞争对手(即作为 hackage 上可用的库实现的一个)是 records package。还是缺少来自extensible records 的链接?

【问题讨论】:

    标签: haskell record


    【解决方案1】:

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

    较新的 GHC 功能(GADT、关联类型、约束类型、多态类型、单例类型)可能允许稍有不同的权衡取舍。特别是单例类型可能允许更好的标签,而多态类型可能允许更优雅的 Typeable/Data/Generics 。

    您链接到的“记录”包取决于声称的“种类”包:

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

    但由于在新的 GHC 版本中将数据类型提升为种类,这不再适用。所以这个 2012 年 1 月的软件包现在可能已经过时了。

    至于记录,也许新系统将从最新一轮的多态镜头中汲取灵感:lens 和/或lens-family

    【讨论】:

    • 就在今天早上,我正在与 Russell (O'Connor) 讨论镜头和可扩展唱片之间的关系——目前还不清楚。 Lenses 非常适合抽象聚合中单个字段的 get/set,但不太擅长表示聚合本身。无论如何,我似乎应该坚持使用 HList(现在),然后尝试找出我应该选择哪些数以千计的变体来处理手头的问题(这是翻译一些使用多态的 O'Caml 代码变体和行类型和函子到 Haskell)。
    • 我最近做了一个受 HList 启发的东西:给定一个类型索引副产品 (TIP) 的东西和 {handler for one case} 它返回 {the result of the handler} 或 {类型较小的 TIP}。将处理程序与 >=> 链接在一起,逐个减少了 TIP。我当时认为它有点模拟模式匹配多态变体。
    猜你喜欢
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多