inumFromCS :: (ChunkData t, Show d, Monad m) => Inum (CtlStream t d) t m a
inumFromCS = mkInumM $ withCleanup pullup $ irepeat $ cschunkI >>= feed
    where pullup = ipopresid >>= ungetI . csData
          feed (CSData t _) = ifeed t
          feed (CSCtl _ _)  = return False
          feed CSEmpty      = idone
inumFromCS :: (ChunkData t, Show d, Monad m) => Inum (CtlStream t d) t m a
inumFromCS = mkInumM $ withCleanup pullup $ irepeat $ cschunkI >>= feed
    where pullup = ipopresid >>= ungetI . csData
          feed (CSData t _) = ifeed t
          feed (CSCtl _ _)  = return False
          feed CSEmpty      = idone
inumFromCS = mkInumM $ withCleanup pullup $ irepeat $ cschunkI >>= feed
    where pullup = ipopresid >>= ungetI . csData
          feed (CSData t _) = ifeed t
          feed (CSCtl _ _)  = return False
          feed CSEmpty      = idone