Я пытаюсь написать код Эрика Кидда * и * 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
в экземпляре, и поэтому у меня ошибка типа.
Есть ли простой выход из этого?