module Codec.Phaser.ByteString (
unpackBS,
unpackLBS,
parseFile_,
parseHandle_
) where
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BL
import Data.Word
import Control.Monad
import Control.Applicative
import System.IO (openFile,IOMode(ReadMode),Handle)
import Codec.Phaser.Core
unpackBS :: (Monoid p) => Phase p BS.ByteString Word8 ()
unpackBS = (go >> unpackBS) <|> return () where
go = get >>= BS.foldr (\w r -> yield w >> r) (return ())
unpackLBS :: (Monoid p) => Phase p BL.ByteString Word8 ()
unpackLBS = (go >> unpackLBS) <|> return () where
go = get >>= BL.foldr (\w r -> yield w >> r) (return ())
parseFile_ :: (Monoid p,PhaserType s) => p -> s p Word8 o a -> FilePath ->
IO (Either [(p,[String])] [a])
parseFile_ p c n = openFile n ReadMode >>= parseHandle_ p c
parseHandle_ :: (Monoid p,PhaserType s) => p -> s p Word8 o a -> Handle ->
IO (Either [(p,[String])] [a])
parseHandle_ p c h = do
d <- BL.hGetContents h
return $ parse_ p (unpackBS >># c) (BL.toChunks d)