我有一个嵌套的互递归 数据结构,想将一些节点与计算昂贵的值关联起来。实际上,我想将 Pandoc 文档中的块暂时链接到出现在该块中的单词列表。
我不想使用的不良选项:
- 扩展块数据类型,使其包括单词列表,这意味着创建一个带有大量(脆弱的)样板代码的新扩展 Pandoc 数据类型。 - 将块映射到单词列表;由于块太复杂而无法有效地用作键,这是次优选择。
我正在寻求的解决方案方向是某种覆盖数据结构,其中包括扩展块,但底层数据类型保持不变,以便我仍然可以使用广泛的 Pandoc 库。但也许这不是 Haskell 的思考方式...
后记 2011-06-12:
正如评论所示,我可能高估了Map方法的成本,部分是基于错误的假设。确实:“没有比显而易见的事实更具欺骗性的了”。
无论如何,我接受hammar的答案,因为它说明了如何创建可扩展的数据类型。
谢谢
我不想使用的不良选项:
- 扩展块数据类型,使其包括单词列表,这意味着创建一个带有大量(脆弱的)样板代码的新扩展 Pandoc 数据类型。 - 将块映射到单词列表;由于块太复杂而无法有效地用作键,这是次优选择。
我正在寻求的解决方案方向是某种覆盖数据结构,其中包括扩展块,但底层数据类型保持不变,以便我仍然可以使用广泛的 Pandoc 库。但也许这不是 Haskell 的思考方式...
后记 2011-06-12:
正如评论所示,我可能高估了Map方法的成本,部分是基于错误的假设。确实:“没有比显而易见的事实更具欺骗性的了”。
无论如何,我接受hammar的答案,因为它说明了如何创建可扩展的数据类型。
谢谢
Ord
实例,在树中比较键值对(用于插入)。我建议使用的包,unordered-containers(模块 Data.HashMap.{Strict,Lazy}),将对键进行哈希处理。 - Thomas M. DuBuisson