Yesod,withAsync

L. *_*ers 4 haskell asynchronous yesod

我是Haskell和Yesod的新手,我正在尝试使用该Control.Concurrent.Async模块来做异步.(代码基于:https://hackage.haskell.org/package/async-2.1.1/docs/Control-Concurrent-Async.html#v : withAsync)

quizWidget = do
   --Get first question   
    withAsync (showQuizItem 1 1 ) $ \qi -> do
    withAsync (showScoreboard)    $ \sb -> do

    quizItem <- wait (qi)
    scoreboard <- wait (sb)

    toWidget $(hamletFile "hamlet/quiz.hamlet")
Run Code Online (Sandbox Code Playgroud)

但是这会产生以下错误:

"使用'toWidget'时没有(MonadWidget IO)的实例".

所以问题是我做错了什么?

Mic*_*man 5

异步包中的API是单态的,这意味着它仅适用于中的操作IO.您正尝试在WidgetT变换器类型中使用它,这是错误消息的来源.您可以使用lifted-async包,它提供withAsync函数的多态变体.在大多数情况下,这应该只是一个问题:

  1. 进口 Control.Concurrent.Async.Lifted
  2. 加入lifted-async你的build-depends