すごい H 本7.10章の「読者への練習問題」

大学の教科書とかでよくある「読者への練習問題としましょう」ってやつですよ。考査前、知りたいことが「読者への練習問題」で泣くやつですよ。
今回は API 調べて分かればそんなに難しくなかった。

解答

問題は次の通り。

Map k に対する Functor のメソッド fmap を実装せよ。
instance Functor (Map k) where
    fmap :: (a -> b) -> Map k a -> Map k b
    fmap f map = ???

??? の部分を書けばいいわけ。
どう実装しようかなと考えたときに連想リストにできればなんとかなるだろうというわけで Map k v -> [(k, v)] となる関数を探す。
Map k v -> [(k, v)] - Hoogle
Data.Map.toList 使えばいいっぽい。これさえ分かれば Prelude.map でなんとかなるはず。というわけで次のようになった。

fmap f = Data.Map.fromList . Prelude.map (\(k, v) -> (k, f v)) . Data.Map.toList