Postgresql Hasql会话';s返回值变量是否与特定类型卡住?

Postgresql Hasql会话';s返回值变量是否与特定类型卡住?,postgresql,haskell,hasql,Postgresql,Haskell,Hasql,我试图在我的Spock应用程序之外连接到Postgres一次,但我似乎无法使用具有多个返回类型的Hasql会话句柄 我的主应用程序相当简单,但无法编译 mainApp :: IO Middleware mainApp = do session pgConfig sessConfig $ do dbHandle <- sessionUnlifter liftIO $ do printAHasqlString dbHandle printAccoun

我试图在我的Spock应用程序之外连接到Postgres一次,但我似乎无法使用具有多个返回类型的Hasql会话句柄

我的主应用程序相当简单,但无法编译

mainApp :: IO Middleware
mainApp = do
  session pgConfig sessConfig $ do
    dbHandle <- sessionUnlifter
    liftIO $ do
      printAHasqlString dbHandle
      printAccountCount dbHandle
      spockT id (appMiddleware >> appRoutes dbHandle)
printaccount
执行返回Int的查询,而
printAHasqlString
执行文本查询。两者都只是打印结果,并返回一个
IO()

但是当我尝试在同一个应用程序中运行这两个查询时,
会话
数据类型中的
r
类型变量被锁定,无法使用第二个变量编译

错误消息:

src/Main.hs:30:25:
  Couldn't match type ‘Text’ with ‘Int’
  Expected type: Session Settings s IO Int -> IO Int
    Actual type: Session Settings s IO Text -> IO Text
  In the first argument of ‘printAccountCount’, namely ‘dbHandle’
  In a stmt of a 'do' block: printAccountCount dbHandle
更新错误

在以下帮助之后-我遇到了一个新错误:

src/Main.hs:29:24:
    Couldn't match type ‘r0’ with ‘a’
      because type variable ‘a’ would escape its scope
    This (rigid, skolem) type variable is bound by
      a type expected by the context: Session Settings s IO a -> IO a
      at src/Main.hs:29:7-31
    Expected type: Session Settings s IO a -> IO a
      Actual type: Session Settings s IO r0 -> IO r0
    Relevant bindings include
      dbHandle :: Session Settings s IO r0 -> IO r0
        (bound at src/Main.hs:27:5)
    In the first argument of ‘printAHsqlString’, namely ‘dbHandle’
    In a stmt of a 'do' block: printAHsqlString dbHandle
如何让该类型变量在调用之间保持灵活


完整(更新)代码:

因为不再有任何sessiononlifterfuss。池是直接公开的,您可以在池上执行
会话
任意次数,而不会造成任何性能损失。

错误消息是什么?这会给我带来一个新的错误-这让人困惑。当我去打印它时,我明确地告诉它结果是一个Int:
无法从上下文(MonadBase IO m)推断出(a~Int)
注释中有完整的错误。我越来越近了-新的错误。我尝试在这里为所有SA添加一个
,但没有帮助<代码>无法将类型“r0”与“a”匹配,因为类型变量“a”将脱离其作用域完整错误在要点中。@cschneid我成功地重现了您的问题。它似乎发现了Hasql API中的一个问题。不幸的是,我今天没有时间处理这件事。我将在未来几天内制定解决方案,并将在这里发布。同时,您可以降级到0.2.3版,其中
会话
ReaderT
的别名,这应该不会给您带来这种麻烦。太棒了!感谢您花时间来关注这一点-是否存在github问题,以便我可以跟踪它?不,还没有问题。我会以任何方式发回这里,以便通知你。
src/Main.hs:29:24:
    Couldn't match type ‘r0’ with ‘a’
      because type variable ‘a’ would escape its scope
    This (rigid, skolem) type variable is bound by
      a type expected by the context: Session Settings s IO a -> IO a
      at src/Main.hs:29:7-31
    Expected type: Session Settings s IO a -> IO a
      Actual type: Session Settings s IO r0 -> IO r0
    Relevant bindings include
      dbHandle :: Session Settings s IO r0 -> IO r0
        (bound at src/Main.hs:27:5)
    In the first argument of ‘printAHsqlString’, namely ‘dbHandle’
    In a stmt of a 'do' block: printAHsqlString dbHandle