我有这个单子:
newtype App a = App { runApp :: ExceptT ServerError (LoggingT (ReaderT AppConfig Handler)) a }
deriving (Functor, Applicative, Monad, MonadReader AppConfig, MonadError ServerError, MonadIO, MonadLogger) via (ExceptT ServerError (LoggingT (ReaderT AppConfig Handler)))
我以为我可以通过这个提升到达Reader中的AppConfig
lift . lift ask
但它不起作用。 您能帮助我如何访问此功能和 AppConfig 数据吗?
提前致谢!
我尝试使用
获取AppConfig数据lift . lift ask
忽略特定的 monad 转换器,您可以在 GHCi 中看到您希望将 lift . lift
的
composition应用于
ask
,而不是 lift
应用于 lift ask
的结果:
> :t lift . lift ask
[type error redacted]
> :t lift . lift $ ask
lift . lift $ ask
:: (MonadTrans t1, MonadTrans t2, Monad m,
Monad (t2 (ReaderT a m))) =>
t1 (t2 (ReaderT a m)) a
替换
t1 ~ ExceptT ServerError
、t2 ~ LoggigT
、a ~ AppConfig
和 m ~ Handler
。