我如何在REPL中运行 Yesod的数据库操作?

How can I run Yesod's DB actions in the REPL?

在正常的 Handler 工作流程中 运行 数据库操作很容易,因为 runDB 函数可用于将 SqlPersistM 操作转换为 Handler个。

但是没有这种方法可以使用默认应用程序设置将 SqlPersistM 直接转换为 IO。查看应用程序脚手架中定义的 Foundation.hs,有以下实例

instance YesodPersist App where
    type YesodPersistBackend App = SqlBackend
    runDB action = do
        master <- getYesod
        runSqlPool action $ appConnPool master
instance YesodPersistRunner App where
    getDBRunner = defaultGetDBRunner appConnPool

它基本上使用 runSqlPool 与应用程序的配置,但我没有看到如何利用它来访问 REPL 中的配置表单的简单方法。

TL;DR: 我正在寻找的只是能够在我的 Yesod 应用程序 中从 cabal repl 中做类似 runDB $ selectList [...] [...] 的事情,而不必复制 Yesod 脚手架开箱即用的设置。

如果您使用的是 Yesod 脚手架,则提供 handler and db functions 让您 运行 处理程序操作和数据库查询,分别来自 repl:

$ cabal repl

db $ selectList [UserName ==. "foo"] []

编辑:我还用这些信息更新了 Yesod's wiki page on GHCi。它包含更多示例并涵盖一些高级用法,例如使用调试器。