我有一个接收器,想在其中使用 attoparsec 进行一些解析。碰巧我得到了一个Partial
结果。所以我想我可能只是leftover
将不足的内容放回上游,以便稍后再添加更多内容。但是没有像我希望的那样附加新的内容。我非常感谢有关如何解决此问题的任何建议。谢谢!
{-# LANGUAGE OverloadedStrings #-}
import Control.Monad.IO.Class (liftIO)
import Data.Conduit
import qualified Data.Conduit.List as CL
import qualified Data.ByteString.Char8 as BS
import Data.Attoparsec.Char8
main = (CL.sourceList [BS.pack "foo", BS.pack "bar"]) $$ sink -- endless loop
-- this works:
-- main = (CL.sourceList [BS.pack "foobar"]) $$ sink
sink :: Sink BS.ByteString IO ()
sink = awaitForever $ \str -> do
liftIO $ putStrLn $ BS.unpack str -- debug, will print foo forever.
case (parse (string "foobar") str) of
Fail _ _ _ -> do
liftIO $ putStr $ "f: " ++ BS.unpack str
sink
Partial _ -> do
leftover str
sink
Done rest final -> do
liftIO $ putStr $ "d: " ++ show final ++ " // " ++ show rest
sink