{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE RankNTypes #-} import Data.Set (Set) import qualified Data.Set as S import Language.Haskell.TH (Overlap (Overlappable)) class (Eq a) => SimpleEq a instance SimpleEq Integer class Functor' a b m where (<@$>) :: (a -> b) -> m a -> m b instance {-# OVERLAPPABLE #-} Functor m => Functor' a b m where (<@$>) = (<$>) instance (Ord a, SimpleEq a, Ord b, SimpleEq b) => Functor' a b Set where (<@$>) = S.map а вот так примерно нельзя?
Так это, всё-таки, нормальное решение?
просто чувствую, что видимо не понимаю, как такой код работает
Конечно работает. Вы же в своём Functor закрепили a и b в голове инстанса
Настоящий Functor ничего не знает о том, что за a и b будут
Обсуждают сегодня