为什么 Data.Map.Map 不是 Bifunctor?

Pro*_*het 1 containers dictionary haskell bifunctor

在 a 中存储数据时Map,我最近在寻找一个Bitraversable实例,因为我想遍历键和值。令我惊讶的是,我发现Map它甚至没有Bifunctor实例,即使first( mapKeys) 和second( map) 的实现都存在。

是否有特定原因,或者这个决定只是为了最大限度地减少依赖性?

谢谢

Dan*_*ner 7

为实现left(你实际上意味着first我会写的?left而不是first处处)不存在,因为mapKeys有一个限制:

Ord k2 => (k1 -> k2) -> Map k1 a -> Map k2 a
Run Code Online (Sandbox Code Playgroud)

left必须适用于任何类型k1k2.