Yesod responseSource来自具有PrimMonad约束的源

时间:2018-10-07 20:16:36

标签: haskell yesod conduit

我正在使用Yesod在网站上工作,并试图将文件从zip存档流式传输到HTTP响应中。

我选择了zip软件包,相关功能是getEntrySource

它返回一个

ConduitT () ByteString m ()

m必须满足的条件

  • PrimMonad m
  • MonadThrow m
  • MonadResource m

适合这些约束的一种类型是ResourceT IO

为了流数据,Yesod提供了respondSource函数,该函数需要一个

ConduitT () (Flush Builder) (HandlerFor site) ()

我的问题是:

  • ResourceT IO适用于getEntrySource,但respondSource期望HandlerFor site。我找到了transPipe函数,但是我不希望解开ResourceT IO并将每个块都包裹在HandlerFor site中。

  • HandlerFor site不是PrimMonad的实例,并且我对PrimMonad的掌握不足以判断它是否有意义。

1 个答案:

答案 0 :(得分:2)

看起来像是纯粹的疏忽,HandlerFor不是PrimMonad的实例。我已经pushed a commit应该解决此问题,一旦CI告诉我它是安全的,它将释放给Hackage。