如何将Persistent的SqlBackend与自定义monad“结合”?

时间:2018-06-15 09:17:59

标签: haskell yesod monad-transformers haskell-persistent

我的Servant应用程序有一个自定义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)

BaseBackendHasPersistentBackend类型类的一部分:

class HasPeristenBackend backend where
  type BaseBackend backend
  persistBackend :: backend -> BaseBackend backend

因此,如果我走在正确的轨道上,我的自定义AppMEnv必须实现此HasPersistentBackend类型类。

data Env = Env {envDbPool, envLogger, envOtherStuff}
type AppM = ReaderT Env IO

任何帮助实现这项工作将不胜感激。最后,我希望能够直接在runSqlPool中致电AppM(即没有任何形式的lift

0 个答案:

没有答案