mapMaybe 用于 Data.Map 中的键

bwr*_*oga 5 haskell

我想将以下函数映射到 a 的键上 Map

f :: a -> Maybe b
Run Code Online (Sandbox Code Playgroud)

并丢弃Nothing密钥并保留Just密钥,但从Just. 就像Map.mapMaybe,但对于键

mapMaybeKeys :: (a -> Maybe b) -> Map a c -> Map b c
Run Code Online (Sandbox Code Playgroud)

我在 Hoogle 中搜索了这种类型的签名,但没有找到任何东西。

我可以这样做:

mapMaybeKeys f
    = Map.toList
    . catMaybes
    . fmap (fmap swap . traverse f . swap)
    . Map.toList
Run Code Online (Sandbox Code Playgroud)

或者:

mapMaybeKeys f
   = Map.mapKeys fromJust
   . Map.delete Nothing
   . Map.mapKeys f
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方式?