gpt4 book ai didi

haskell - 背包使用示例

转载 作者:行者123 更新时间:2023-12-04 04:28:30 24 4
gpt4 key购买 nike

我正在查看 backpack wiki 上的引用资料试图了解在哪些情况下使用 backpack将被认为比其他 Haskell 特性(如类型类和类型族)更合适。

特别是在 this blog-post作者 backpack ,给出了一个实现正则表达式的简单匹配器的示例。但是据我了解,相同的模块可以使用类型族进行编码。

有没有任何例子可以简明地展示背包相对于更传统的 Haskell 功能的优势?如果我上面提到的例子很好,你知道为什么使用类型族的解决方案会低于标准吗?

最佳答案

背包的主要好处:

  • 保证没有性能开销(使用类型类可能会有性能开销,因为它们在 Haskell 中是如何实现的)。这在处理字符串数据类型、解析器、容器等时非常重要。
  • 与使用类型类或类型族相比,代码更简洁、更好。

  • 我写了一篇关于 Backpack 的特殊用法的博客文章:为容器数据结构实现多态接口(interface):
  • Picnic: put containers into a backpack

  • 拥有这样的容器接口(interface)允许:
  • 编写适用于任何容器的多态函数(例如 MapHashMapIntMap )。
  • 为容器的属性编写单个测试套件,并在每个包中使用它,而无需重复代码。
  • 编写单个基准测试并与每个容器数据结构一起使用,而不会产生性能开销。

  • 如果使代码更清洁的话。这是 groupBy 的签名使用背包实现的功能:
    groupBy :: forall k f a . (Foldable f, Key k) => (a -> k) -> f a -> Map k (NonEmpty a)

    很清楚,它只是一个普通的 Haskell。如果您使用类型类和类型族实现容器接口(interface)(这是 done in relude ,此签名将如下所示:
    groupBy
    :: forall f t a . (Foldable f, DynamicMap t, Val t ~ NonEmpty a, Monoid t)
    => (a -> Key t) -> f a -> t

    更难阅读和理解。

    还有 it was discussed recently当您需要编译针对不同平台的 Haskell 代码(也称为条件编译)时,Backpack 可以帮助您避免 CPP。

    关于haskell - 背包使用示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52538213/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com