machines-binary-0.2.0.0: src/Data/Binary/Get/Machine.hs
module Data.Binary.Get.Machine where
import Data.ByteString (ByteString)
import Data.Binary.Get (Decoder(..), Get, pushChunk, runGetIncremental)
import Data.Machine (MachineT(..), ProcessT, Step(Await, Yield), Is(Refl), stopped)
processGet :: Monad m => Get a -> ProcessT m ByteString a
processGet getA = processDecoder (runGetIncremental getA)
processDecoder :: Monad m => Decoder a -> ProcessT m ByteString a
processDecoder decA = MachineT . return $ Await f Refl stopped where
f xs = case pushChunk decA xs of
-- TODO Add `Fail` case
Done _ _ a -> MachineT . return $ Yield a stopped
decA' -> processDecoder decA'