m Config
instance (Monad m) => ConfigMonad (ReaderT Config m) where
getConfig = ask
instance (ConfigMonad m) => ConfigMonad (ReaderT r m)
where getConfig = lift getConfig
При попытке вызова выдает
Overlapping instances for ConfigMonad (ReaderT Config (ServerPartT IO))(инстансов всего 2), вроде бы с точки зрения математики тут никакого пересечения нет. Я что то не так делаю или это ограничение компилятора?
есть пересечение, ведь ConfigMonad тоже Monad лучше так наверное: class Monad m => MonadConfig m where getConfig :: m Config instance MonadReader Config m => MonadConfig m where getConfig = ask data SomeComplexConfig = SomeComplexConfig { config :: Config , meta :: Meta } instance MonadReader SomeComplexConfig m => MonadConfig m where getConfig = asks config
Обсуждают сегодня