【发布时间】:2015-05-15 03:13:50
【问题描述】:
Haskell 有多种数据结构,如Map key value,在内部使用树或哈希映射。使用这种数据结构时,有可能在进行查找时,键不存在。
在我的用例中,可能的键集是有限的(从技术上讲,它们在 Enum 和 Ord 中),我只对包含所有键的映射感兴趣。
如何创建一个类似map的数据结构,保证所有键都存在于map中,即它可以有一个非部分函数lookup :: Map key value -> key -> value(可能对key类型、Ord或@987654327有约束@ 或其他)?已经有这样的东西了吗?
换句话说:我想要一个只有在插入所有可能的键时才能查询的数据结构。我可以使用常规的Map 和fromMaybe,但我不想指定默认值——我想在类型级别保证永远不需要默认值。
【问题讨论】:
-
地图应该为您没有手动插入的键返回什么值?如果每个键都相同,则可以改用
Data.Maybe中的fromMaybe。 -
你不是说
lookup :: Ord key => Map key value -> key -> value吗?你确实需要Ord约束... -
@ThreeFx 我用更多细节更新了这个问题。
-
在我看来你想要的只是一个总的
k -> v函数。 -
有什么理由不使用数组?
标签: haskell data-structures types