diff --git a/src/Data/Word/Word8.hs b/src/Data/Word/Word8.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Word/Word8.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ScopedTypeVariables, TypeApplications #-}
+{-# LANGUAGE TypeOperators #-}
+{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}
+
+module Data.Word.Word8 where
+
+import Data.MonoTraversable
+import Data.Bits
+import Data.Bits.ToolsYj
+import Data.Bool
+import Data.Word
+
+toBits :: (MonoFoldable mono, Element mono ~ Word8, Bits b) => mono -> b
+toBits = ofoldr (\b s -> bitsToBits 8 b .|. s `shiftL` 8) zeroBits
+
+toBits' :: forall b mono .
+	(MonoFoldable mono, Element mono ~ Word8, FiniteBits b) =>
+	mono -> Maybe b
+toBits' bs = bool
+	Nothing
+	(Just $ ofoldr (\b s -> bitsToBits 8 b .|. s `shiftL` 8) zeroBits bs)
+	(8 * olength bs <= finiteBitSize @b undefined)
+
+toBitsBE :: (MonoFoldable mono, Element mono ~ Word8, Bits b) => mono -> b
+toBitsBE = ofoldl' (\s b -> bitsToBits 8 b .|. s `shiftL` 8) zeroBits
diff --git a/src/Foreign/C/ByteArray.hs b/src/Foreign/C/ByteArray.hs
--- a/src/Foreign/C/ByteArray.hs
+++ b/src/Foreign/C/ByteArray.hs
@@ -15,6 +15,9 @@
 malloc :: Int -> IO B
 malloc n = (, n) <$> Alloc.mallocBytes n
 
+alloca :: Int -> (B -> IO a) -> IO a
+alloca n a = Alloc.allocaBytes n $ a . (, n)
+
 free :: B -> IO ()
 free = Alloc.free . fst
 
diff --git a/tools-yj.cabal b/tools-yj.cabal
--- a/tools-yj.cabal
+++ b/tools-yj.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           tools-yj
-version:        0.1.0.44
+version:        0.1.0.45
 synopsis:       Tribial tools
 description:    Please see the README on GitHub at <https://github.com/YoshikuniJujo/tools-yj#readme>
 category:       Tools
@@ -47,6 +47,7 @@
       Data.Word.Adler32
       Data.Word.Crc32
       Data.Word.ToolsYj
+      Data.Word.Word8
       Foreign.C.ByteArray
       Text.Show.ToolsYj
   other-modules:
