diff --git a/src/Control/Monad/Yaftee/Pipe/Tools.hs b/src/Control/Monad/Yaftee/Pipe/Tools.hs
--- a/src/Control/Monad/Yaftee/Pipe/Tools.hs
+++ b/src/Control/Monad/Yaftee/Pipe/Tools.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE ImportQualifiedPost #-}
 {-# LANGUAGE BlockArguments, LambdaCase #-}
-{-# LANGUAGE ExplicitForAll, TypeApplications #-}
+{-# LANGUAGE ScopedTypeVariables, TypeApplications #-}
 {-# LANGUAGE RequiredTypeArguments #-}
 {-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE FlexibleContexts #-}
@@ -27,8 +27,12 @@
 
 	-- * SCAN
 
-	scanl
+	scanl,
 
+	-- * DEVIDE
+
+	devideRun, devide, devideNs, Devide
+
 	) where
 
 import Prelude hiding (length, filter, scanl)
@@ -97,3 +101,65 @@
 scanl :: U.Member Pipe.P es => (b -> a -> b) -> b -> Eff.E es a b r
 scanl op =
 	fix \go v -> (v `op`) <$>  Pipe.await >>= \v' -> Pipe.yield v' >> go v'
+
+devideRun :: forall nm m es i o r . (P.Monoid m, HFunctor.Loose (U.U es)) =>
+	Eff.E (State.Named nm (Devide m) ': es) i o r ->
+	Eff.E es i o (r, Devide m)
+devideRun = flip (State.runN @nm) (Devide mempty)
+
+devideNs :: forall nm -> (
+	Semigroup m,
+	U.Member Pipe.P es, U.Member (State.Named nm (Devide m)) es ) =>
+	(Int -> m -> Maybe (m, m)) -> m -> [Int] -> Eff.E es m m ()
+devideNs nm sp bs0 ns0 = do
+	State.putN nm $ Devide bs0
+	($ ns0) $ fix \go -> \case
+		[] -> pure ()
+		n : ns -> do
+			Pipe.yield =<< getInput nm sp n
+			go ns
+
+devide :: forall nm -> (
+	Eq m, P.Monoid m,
+	U.Member Pipe.P es, U.Member (State.Named nm (Devide m)) es ) =>
+	(Int -> m -> Maybe (m, m)) -> m -> Int -> Eff.E es m m ()
+devide nm sp bs0 n = do
+	State.putN nm $ Devide bs0
+	fix \go -> do
+		bs <- getInput' nm sp n
+		if bs == mempty then pure () else Pipe.yield bs >> go
+
+getInput' :: forall m es o . forall nm -> (
+	P.Monoid m,
+	U.Member Pipe.P es, U.Member (State.Named nm (Devide m)) es ) =>
+	(Int -> m -> Maybe (m, m)) -> Int -> Eff.E es m o m
+getInput' nm sp n = State.getN nm >>= \(Devide bs) -> case sp n bs of
+	Nothing -> readMore' nm >>= bool
+		(unDevide <$> (State.getN nm <* State.putN @(Devide m) nm (Devide mempty)))
+		(getInput' nm sp n)
+	Just (t, d) -> t <$ State.putN nm (Devide d)
+
+readMore' :: forall nm -> (
+	Semigroup mono, U.Member Pipe.P es,
+	U.Member (State.Named nm (Devide mono)) es ) =>
+	Eff.E es mono o Bool
+readMore' nm = Pipe.awaitMaybe >>= \case
+	Nothing -> pure False
+	Just xs -> True <$ State.modifyN nm (Devide . (<> xs) . unDevide)
+
+getInput :: forall nm -> (
+	Semigroup m,
+	U.Member Pipe.P es, U.Member (State.Named nm (Devide m)) es ) =>
+	(Int -> m -> Maybe (m, m)) -> Int -> Eff.E es m o m
+getInput nm sp n = State.getN nm >>= \(Devide bs) -> case sp n bs of
+	Nothing -> readMore nm >> getInput nm sp n
+	Just (t, d) -> t <$ State.putN nm (Devide d)
+
+readMore :: forall nm -> (
+	Semigroup mono, U.Member Pipe.P es,
+	U.Member (State.Named nm (Devide mono)) es ) =>
+	Eff.E es mono o ()
+readMore nm =
+	Pipe.await >>= \xs -> State.modifyN nm (Devide . (<> xs) . unDevide)
+
+newtype Devide m = Devide { unDevide :: m } deriving Show
diff --git a/yaftee-conduit.cabal b/yaftee-conduit.cabal
--- a/yaftee-conduit.cabal
+++ b/yaftee-conduit.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           yaftee-conduit
-version:        0.1.0.0
+version:        0.1.0.1
 synopsis:       Conduit implemented on Yaftee
 description:    Please see the README on GitHub at <https://github.com/YoshikuniJujo/yaftee-conduit#readme>
 category:       Control
