我正在使用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
的掌握不足以判断它是否有意义。
答案 0 :(得分:2)
看起来像是纯粹的疏忽,HandlerFor
不是PrimMonad
的实例。我已经pushed a commit应该解决此问题,一旦CI告诉我它是安全的,它将释放给Hackage。