«Нет экземпляра для (Ord k )» при реализации Functor над Data.Map.Map

Я пытаюсь реализовать Functor fmap поверх Data.Map.Map, но получаю сообщение об ошибке. Я уверен, что мне не нужно преобразовывать карту в список и обратно, чтобы это работало, но это лучшее, что я придумал до сих пор.

class Functor' f where
    fmap' :: (a -> b) -> f a -> f b

instance Functor' (Map.Map k) where
    fmap' f m
        | Map.null m = Map.empty
        | otherwise = let x:xs = Map.toList m
                          mtail = Map.fromList xs
                          a = fst x
                          b = snd x
                      in  Map.insert a (f b) (fmap f mtail)

Ошибка:

No instance for (Ord k)
  arising from a use of `Map.fromList'
In the expression: Map.fromList xs
In an equation for `mtail': mtail = Map.fromList xs
In the expression:
  let
    x : xs = Map.toList m
    mtail = Map.fromList xs
    a = fst x
   ....
  in Map.insert a (f b) (fmap f mtail)

Любые идеи?

6
задан Ashe 29 June 2012 в 03:21
поделиться