使用conduit,我的私人仓库代码无法编译:
Expected type: ConduitM
Text Void (Control.Monad.Trans.Resource.Internal.ResourceT IO) ()
Actual type: ConduitM
ByteString
Void
(Control.Monad.Trans.Resource.Internal.ResourceT IO)
()
如何定义功能?
type Helper a = ConduitM a Void (Control.Monad.Trans.Resource.Internal.ResourceT IO ()
f :: Helper ByteString -> Helper Text
答案 0 :(得分:2)
我不太了解conduit
,但是从阅读文档中我会尝试以下内容:
import Data.Void (Void)
import Data.Text (Text)
import Data.Text.Encoding (encodeUtf8, decodeUtf8)
import Data.ByteString (ByteString)
import Data.Conduit
type Helper a = ConduitM a Void (Control.Monad.Trans.Resource.Internal.ResourceT IO) ()
f :: Helper ByteString -> Helper Text
f = mapInput encodeUtf8 (pure . decodeUtf8)
使用mapInput
,encodeUtf8
和decodeUtf8
这是未经测试的,告诉我它是否适合你! : - )击>
在ghci中快速测试,它似乎工作。您可能希望对decodeUtf8
进行适当的错误处理。
答案 1 :(得分:2)
我建议将decodeUtf8C
function与普通融合(@{
Layout = "";
}
运算符)一起使用。如果您的代码如下:
.|
然后你可以把它重写为:
makesText .| needsByteString
如果您想忽略编码错误,也可以选择使用decodeUtf8LenientC
。