haskell - 如何将 Persistent 的 SqlBackend 与自定义 monad “组合”?
问题描述
我有一个用于我的仆人应用程序的自定义 monad 堆栈,我想将其保留为单个ReaderT
而不使其成为“洋葱”之类的东西SqlPersistT
。问题是,我无法找到任何执行此操作的代码示例。
似乎大多数 Persistent 函数在以下 monad 中返回一个动作:(MonadIO m, PersistRecordBackend record backend) => ReaderT backend m record
这是 的定义PersistRecordBackend
:
type PersistRecordBackend record backend = (PersistEntity record, PersistEntityBackend record ~ BaseBackend backend)
BaseBackend
是HasPersistentBackend
类型类的一部分:
class HasPeristenBackend backend where
type BaseBackend backend
persistBackend :: backend -> BaseBackend backend
所以,如果我走在正确的轨道上,我的自定义AppM
或者Env
将不得不实现这个HasPersistentBackend
类型类。
data Env = Env {envDbPool, envLogger, envOtherStuff}
type AppM = ReaderT Env IO
任何有关使这项工作的帮助将不胜感激。最后,我希望能够runSqlPool
直接调用AppM
(即没有任何形式的lift
)
解决方案
推荐阅读
- utf-8 - Linux - GREP 打印带有特殊字符的行
- javascript - 关闭选项卡时不会调用 onbeforeunload
- java - 需要帮助来理解计数排序排序算法的实现
- python - 循环 smtp python 时更改电子邮件凭据
- python - 在 django/python 我的主页中仅列出三个元素
- java - 父类为子类定义静态类
- javascript - ngFor 和点击事件
- python - 在 Python 中从 YAML 创建自定义类的对象
- activemq-artemis - 在 broker.xml 文件中编写和通过 JMX 创建的队列之间的区别
- javascript - Angular 8:管道测试有什么问题?