Проблема с экземпляром Functor над ключами в Map из Data.Map - PullRequest
1 голос
/ 02 апреля 2011

Я пытаюсь написать код Эрика Кидда * и * Sigfpe * для монады вероятности с использованием Data.Map в качестве бэкэнда, но я застрял с экземпляром Functor.

У меня есть тип данных, который представляет собой таблицу вероятностей:

newtype Prob f a = Prob {table :: Map a f}

, которая при каждом значении для переменной типа a associate является вероятностью, которая имеет тип Floating f => f.Экземпляр должен быть задан следующим образом:

instance (Floating f) => Functor (Prob f) where 
   fmap f (Prob tab) = Prob (mapKeysWith (+) f tab)

, но mapKeysWith имеет тип (Ord k2) => Map k1 a -> (a -> a -> a) -> (k1 -> k2) -> Map k2 a.У меня нет способа применить ограничение Ord в экземпляре, и поэтому у меня ошибка типа.

Есть ли простой выход из этого?

1 Ответ

3 голосов
/ 02 апреля 2011

Ничего простого, я боюсь;Это хорошо известная проблема с FunctorMonad).Как обычно, Олег имеет решение (для Set, но Map решается аналогично), если вы можете переписать, чтобы использовать заменяющий экземпляр Functor.(См. Также liboleg на Hackage .)

...