diff --git a/bytable.cabal b/bytable.cabal
--- a/bytable.cabal
+++ b/bytable.cabal
@@ -2,7 +2,7 @@
 build-type:	Simple
 
 name:		bytable
-version:	0.0.0.1
+version:	0.0.0.2
 stability:	Experimental
 author:		Yoshikuni Jujo <PAF01143@nifty.ne.jp>
 maintainer:	Yoshikuni Jujo <PAF01143@nifty.ne.jp>
@@ -28,7 +28,7 @@
 source-repository	this
     type:	git
     location:	git://github.com/YoshikuniJujo/forest
-    tag:	bytable-0.0.0.1
+    tag:	bytable-0.0.0.2
 
 library
     hs-source-dirs:	src
diff --git a/src/Codec/Bytable.hs b/src/Codec/Bytable.hs
--- a/src/Codec/Bytable.hs
+++ b/src/Codec/Bytable.hs
@@ -3,7 +3,7 @@
 module Codec.Bytable (
 	Bytable(..),
 	BytableM(..), evalBytableM, execBytableM,
-	head, take, null
+	head, take, null, list,
 ) where
 
 import Prelude hiding (take, head, null)
@@ -39,6 +39,10 @@
 	fromByteString :: BS.ByteString -> Either String b
 	toByteString :: b -> BS.ByteString
 
+instance Bytable BS.ByteString where
+	fromByteString = Right
+	toByteString = id
+
 head :: BytableM Word8
 head = BytableM $ \bs -> case BS.uncons bs of
 	Just (h, t) -> Right (h, t)
@@ -53,3 +57,14 @@
 
 null :: BytableM Bool
 null  = BytableM $ \bs -> Right (BS.null bs, bs)
+
+list :: Int -> BytableM b -> BytableM [b]
+list n m = do
+	bs <- take n
+	case evalBytableM lst bs of
+		Right xs -> return xs
+		Left msg -> fail msg
+	where
+	lst = do
+		e <- null
+		if e then return [] else (:) <$> m <*> lst
