diff --git a/chiasma.cabal b/chiasma.cabal
--- a/chiasma.cabal
+++ b/chiasma.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           chiasma
-version:        0.12.0.0
+version:        0.12.1.0
 synopsis:       A tmux client for Polysemy
 description:    See https://hackage.haskell.org/package/chiasma/docs/Chiasma.html
 category:       Terminal
diff --git a/lib/Chiasma/Interpreter/ProcessOutput.hs b/lib/Chiasma/Interpreter/ProcessOutput.hs
--- a/lib/Chiasma/Interpreter/ProcessOutput.hs
+++ b/lib/Chiasma/Interpreter/ProcessOutput.hs
@@ -1,38 +1,24 @@
 module Chiasma.Interpreter.ProcessOutput where
 
 import Data.Attoparsec.ByteString (parse)
-import Data.Attoparsec.Types (IResult (Done, Fail, Partial))
-import Polysemy.Conc (interpretAtomic)
-import Polysemy.Process.Effect.ProcessOutput (ProcessOutput (Chunk))
+import qualified Data.Attoparsec.Types as Attoparsec
+import qualified Polysemy.Process.Data.ProcessOutputParseResult as ProcessOutputParseResult
+import Polysemy.Process.Data.ProcessOutputParseResult (ProcessOutputParseResult)
+import Polysemy.Process.Effect.ProcessOutput (ProcessOutput)
+import Polysemy.Process.Interpreter.ProcessOutput (interpretProcessOutputIncremental)
 
 import Chiasma.Data.TmuxEvent (TmuxEvent)
 import Chiasma.Native.TmuxOutputBlock (messageParser)
 
-type ParseResult =
-  IResult ByteString TmuxEvent
-
-type ParseCont =
-  ByteString -> IResult ByteString TmuxEvent
-
-parseResult ::
-  Member (AtomicState (Maybe ParseCont)) r =>
-  ParseResult ->
-  Sem r ([Either Text TmuxEvent], ByteString)
-parseResult = \case
-  Fail _ _ err -> pure ([Left (toText err)], "")
-  Partial c -> ([], "") <$ atomicPut (Just c)
-  Done rest block -> pure ([Right block], rest)
+-- | Convert an attoparsec 'Attoparsec.IResult' to 'ProcessOutputParseResult'.
+fromAttoparsec :: Attoparsec.IResult ByteString TmuxEvent -> ProcessOutputParseResult TmuxEvent
+fromAttoparsec = \case
+  Attoparsec.Fail _ _ err -> ProcessOutputParseResult.Fail (toText err)
+  Attoparsec.Partial c -> ProcessOutputParseResult.Partial (fromAttoparsec . c)
+  Attoparsec.Done rest a -> ProcessOutputParseResult.Done a rest
 
 interpretProcessOutputTmuxEvent ::
   ∀ p r .
-  Member (Embed IO) r =>
   InterpreterFor (ProcessOutput p (Either Text TmuxEvent)) r
 interpretProcessOutputTmuxEvent =
-  interpretAtomic (Nothing :: Maybe ParseCont) .
-  reinterpret \case
-    Chunk _ new ->
-      atomicState' (Nothing,) >>= \case
-        Just cont ->
-          parseResult (cont new)
-        Nothing ->
-          parseResult (parse messageParser new)
+  interpretProcessOutputIncremental (fromAttoparsec . parse messageParser)
