mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-26 10:21:52 +00:00
24 lines
709 B
Haskell
24 lines
709 B
Haskell
module Util.Conduit where
|
|
|
|
import Startlude
|
|
|
|
import Conduit
|
|
import Data.Text as T
|
|
import Data.Attoparsec.Text
|
|
|
|
parseC :: MonadIO m => Parser b -> ConduitT Text b m ()
|
|
parseC parser = fix $ \cont -> parseWith g parser "" >>= \case
|
|
Done rest result -> do
|
|
yield result
|
|
unless (T.null rest) $ leftover rest >> cont
|
|
Fail _ _ msg -> panic $ toS msg
|
|
Partial _ -> panic "INCOMPLETE PARSE"
|
|
where
|
|
g :: MonadIO m => ConduitT Text o m Text
|
|
g = await >>= \case
|
|
Nothing -> pure mempty
|
|
Just x -> print x >> pure x
|
|
|
|
lineParser :: Parser Text
|
|
lineParser = takeTill isEndOfLine <* endOfLine
|