【问题标题】:Is there a standard immutable "Map" (e.g. Data.Map, Data.HashMap) typeclass in Haskell?Haskell 中是否有标准的不可变“Map”(例如 Data.Map、Data.HashMap)类型类?
【发布时间】:2019-03-21 15:31:42
【问题描述】:

似乎字典的概念会产生许多不同的实现,这是可以理解的。由于这是 Haskell,我将专注于不可变映射/哈希/字典。我希望能够为我正在开发的一个小库使用类型类,并允许用户选择他们的 Hash/Map/Dict 实现。

如果没有标准类型类,似乎通过 hackage 提供类型类可能很有用,如果做不到这一点,(作为库/API 提供者)仍然可以从使用 hackage 包或自己的类型类中受益允许用户为地图选择给定的实现。

假设我没有错过 Dicts 的类型类,有什么特别的关于不可变字典不适合 Haskell 中的类型类的吗?

更新

更笼统的问题Why is Haskell missing "obvious" Typeclasses 提供了很多有用的见解,有助于回答这个问题,但没有为这个特殊情况提供实际的解决方案。

【问题讨论】:

标签: haskell typeclass


【解决方案1】:

对于类似Map 的数据结构有一些无法解决的问题。幸运的是,背包有帮助。您可以在此处通过 Backpack 看到Map 的接口:

我已经实现了这个解决方案和一篇关于这种接口的博客文章:

【讨论】:

  • 我不知道模块签名存在,我可以看到这非常有用(特别是对于想要避免更多“高级” FP 或类别理论的人
  • Backpack 背后的动机之一是保持简单的 Haskell。 Map 的 typeclass 很可能会涉及到像 TypeFamilies 这样的高级功能,所以 Backpack 在这里真的大放异彩!
  • 对不起,如果我错过了一些明显的东西,因为我对 Haskell 开发相当陌生,但我似乎无法在 hackage 上找到它。是否有建议的方式在外部使用项目代码?我看到了github.com/haskell/cabal/issues/4206,所以假设您可能正在等待发布到 hackage。
  • 嗯,我现在看到背包不仅仅是一个概念性的想法,并且需要使用 next.hackage(当前),但我也没有看到那里的包。
  • @bbarker 它不在 Hackage 上,因为在 Hackage 上维护它需要上传 20 个包。我想等待多个公共图书馆支持首先实现(它几乎完成,将在最近几天合并到cabal)。同时可以依赖 GitHub 仓库,cabal 允许直接指定对 GitHub 的依赖。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 2014-04-15
  • 2019-02-14
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
相关资源
最近更新 更多