В настоящее время я просматриваю главу 8 Изучите Haskell, и я дошел до раздела Functor
класса типов. В указанном разделе автор приводит примеры того, как разные типы могут быть сделаны экземплярами класса (например, Maybe
, пользовательский тип Tree
и т. Д.). Увидев это, я решил (для развлечения и практики) попробовать реализовать экземпляр для тип _ 4_; при этом игнорируя Data.Set.map
, конечно.
Сам по себе экземпляр довольно прост, и я написал его так:
instance Functor Set.Set where
fmap f empty = Set.empty
fmap f s = Set.fromList $ map f (Set.elems s)
Но поскольку я использую функцию _ 7_ это приводит к ограничению класса, вызывающему для типов, используемых в Set
, быть Ord
, что объясняется ошибкой компилятора:
Error occurred
ERROR line 4 - Cannot justify constraints in instance member binding
*** Expression : fmap
*** Type : Functor Set => (a -> b) -> Set a -> Set b
*** Given context : Functor Set
*** Constraints : Ord b
См. Живой пример
Я попытался наложить ограничение на экземпляр или добавить сигнатуру типа в fmap
, но ничего не получилось (оба тоже были ошибками компилятора).
В такой ситуации, как может быть выполнено и удовлетворено ограничение? Есть ли какой-нибудь способ?
Заранее спасибо! :)