Dam*_*les 9 haskell typeclass type-families haskell-backpack
我正在查看backpack维基上的引用,  试图理解在哪些情况下使用backpack它将被认为适合于其他Haskell功能,如类型类和类型系列.
特别是,在作者的博客文章中backpack,提出了一个实例,用于实现正则表达式的简单匹配器.但据我所知,同一模块可以使用类型族进行编码.
是否有任何示例简明扼要地展示了背包相对于更传统的Haskell功能的优势?如果我上面提到的例子很好,你知道为什么使用类型系列的解决方案会不合适吗?
背包的主要优点:
我写了一篇关于 Backpack 的一个特殊用法的博客文章:为容器数据结构实现一个多态接口:
拥有这样的容器接口允许:
Map、HashMap和IntMap)的多态函数。如果条款使代码更清晰。这是groupBy使用 Backpack 实现的函数的签名:
groupBy :: forall k f a . (Foldable f, Key k) => (a -> k) -> f a -> Map k (NonEmpty a)
很明显,它只是一个普通的 Haskell。如果您使用类型类和类型系列为容器实现接口(这是在relude中完成的,此签名将如下所示:
groupBy
    :: forall f t a . (Foldable f, DynamicMap t, Val t ~ NonEmpty a, Monoid t)
    => (a -> Key t) -> f a -> t
更难阅读和理解。
最近还讨论了当您需要编译面向不同平台的 Haskell 代码(也称为条件编译)时,Backpack 可以帮助避免 CPP。