来自具有 PrimMonad 约束的源的 Yesod respondSource
Yesod respondSource from source that has PrimMonad constraint
我正在使用 Yesod 开发一个网站,并尝试将文件从 zip 存档流式传输到 HTTP 响应中。
我选择了zip
包,对应的函数是getEntrySource。
它returns一个
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
的理解还不足以判断它是否有意义.
HandlerFor
不是 PrimMonad
的一个实例,这看起来像是一个纯粹的疏忽。我已经 pushed a commit 解决了这个问题,一旦 CI 告诉我它是安全的,我就会发布给 Hackage。
我正在使用 Yesod 开发一个网站,并尝试将文件从 zip 存档流式传输到 HTTP 响应中。
我选择了zip
包,对应的函数是getEntrySource。
它returns一个
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
的理解还不足以判断它是否有意义.
HandlerFor
不是 PrimMonad
的一个实例,这看起来像是一个纯粹的疏忽。我已经 pushed a commit 解决了这个问题,一旦 CI 告诉我它是安全的,我就会发布给 Hackage。