Size: a a a

2020 November 29

DB

Danil Berestov in Haskell
Блин, я что-то запутался в этих трансформерах.. Почему он требудет от меня MonadLogger IO?
type LoggerT m = THL.LoggerT 'Timed () m
type ConfigT m = ReaderT Config m

type SqlT m = ReaderT (Pool SqlBackend) (LoggerT m)

newtype Application a = Application { runApplication :: ConfigT (LoggerT (SqlT IO)) a }
 deriving (Functor, Applicative, Monad, MonadReader Config)

instance MonadLogger Application where
 monadLoggerLog loc src lvl msg = Application $ lift $ monadLoggerLog loc src lvl msg
источник

к

кана in Haskell
ну, мне хочется ничего лишнего не писать в семействах
источник

DB

Danil Berestov in Haskell
Danil Berestov
Блин, я что-то запутался в этих трансформерах.. Почему он требудет от меня MonadLogger IO?
type LoggerT m = THL.LoggerT 'Timed () m
type ConfigT m = ReaderT Config m

type SqlT m = ReaderT (Pool SqlBackend) (LoggerT m)

newtype Application a = Application { runApplication :: ConfigT (LoggerT (SqlT IO)) a }
 deriving (Functor, Applicative, Monad, MonadReader Config)

instance MonadLogger Application where
 monadLoggerLog loc src lvl msg = Application $ lift $ monadLoggerLog loc src lvl msg
    • Could not deduce (MonadLogger IO)
       arising from a use of ‘monadLoggerLog’
     from the context: ToLogStr msg
       bound by the type signature for:
                  monadLoggerLog :: forall msg.
                                    ToLogStr msg =>
                                    Loc
                                    -> monad-logger-0.3.35:Control.Monad.Logger.LogSource
                                    -> LogLevel
                                    -> msg
                                    -> Application ()
источник

к

кана in Haskell
минут 5 просто отлавливал проблему, почему сравнение не работает, я забыл compare 1 0 кейс
источник

DB

Danil Berestov in Haskell
кана
ну, мне хочется ничего лишнего не писать в семействах
Инстанс MonadLogger для LoggerT
instance (Monad m, MonadLogger m) => MonadLogger (LoggerT 'Timed () m) where
 monadLoggerLog loc _ lvl msg = LoggerT $ \logFunc -> (const ((), ())) <$> logFunc True loc lvl (toLogStr msg)

instance (Monad m, MonadLogger m) => MonadLogger (LoggerT 'NoTime () m) where
 monadLoggerLog loc _ lvl msg = LoggerT $ \logFunc -> (const ((), ())) <$> logFunc False loc lvl (toLogStr msg)
источник

к

кана in Haskell
ты вызываешь

monadLoggerLog :: _ -> LoggerT (SqlT IO) a
источник

DB

Danil Berestov in Haskell
ой
источник

DB

Danil Berestov in Haskell
не туда ответил
источник

DB

Danil Berestov in Haskell
кана
ты вызываешь

monadLoggerLog :: _ -> LoggerT (SqlT IO) a
Ну да
источник

к

кана in Haskell
а для LoggerT есть инстанс MonadLogger для любой m?
источник

к

кана in Haskell
logger увидел
источник

DB

Danil Berestov in Haskell
кана
а для LoggerT есть инстанс MonadLogger для любой m?
Ну я выше кинул инстранс
источник

DB

Danil Berestov in Haskell
Может его как-то импортнуть надо?
источник

DB

Danil Berestov in Haskell
Мб в скоуп не попал типа?
источник

к

кана in Haskell
Danil Berestov
Блин, я что-то запутался в этих трансформерах.. Почему он требудет от меня MonadLogger IO?
type LoggerT m = THL.LoggerT 'Timed () m
type ConfigT m = ReaderT Config m

type SqlT m = ReaderT (Pool SqlBackend) (LoggerT m)

newtype Application a = Application { runApplication :: ConfigT (LoggerT (SqlT IO)) a }
 deriving (Functor, Applicative, Monad, MonadReader Config)

instance MonadLogger Application where
 monadLoggerLog loc src lvl msg = Application $ lift $ monadLoggerLog loc src lvl msg
а что за THL.LoggerT
?
источник

DB

Danil Berestov in Haskell
кана
а что за THL.LoggerT
?
источник

к

кана in Haskell
instance (Monad m, MonadLogger m) => MonadLogger (LoggerT 'Timed () m)
источник

к

кана in Haskell
для LoggerT m нет инстанса MonadLogger, пока его нет для m
источник

DB

Danil Berestov in Haskell
кек лол
источник

DB

Danil Berestov in Haskell
блина
источник