diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
 # hw-bits
-[![0.0-branch](https://circleci.com/gh/haskell-works/hw-bits/tree/0.0-branch.svg?style=svg)](https://circleci.com/gh/haskell-works/hw-bits/tree/0.0-branch)
+[![CircleCI](https://circleci.com/gh/haskell-works/hw-bits/tree/0-branch.svg?style=svg)](https://circleci.com/gh/haskell-works/hw-bits/tree/0-branch)
 
 Facilities for manipulating bits.
diff --git a/hw-bits.cabal b/hw-bits.cabal
--- a/hw-bits.cabal
+++ b/hw-bits.cabal
@@ -1,5 +1,5 @@
 name:                   hw-bits
-version:                0.0.0.12
+version:                0.1.0.0
 synopsis:               Conduits for tokenizing streams.
 description:            Please see README.md
 homepage:               http://github.com/haskell-works/hw-bits#readme
@@ -38,6 +38,7 @@
                       , HaskellWorks.Data.Bits.BitShow
                       , HaskellWorks.Data.Bits.BitShown
                       , HaskellWorks.Data.Bits.BitWise
+                      , HaskellWorks.Data.Bits.Broadword
                       , HaskellWorks.Data.Bits.ElemFixedBitSize
                       , HaskellWorks.Data.Bits.FixedBitSize
                       , HaskellWorks.Data.Bits.FromBitTextByteString
@@ -50,7 +51,7 @@
                       , HaskellWorks.Data.Bits.Word
   build-depends:        base                          >= 4          && < 5
                       , bytestring
-                      , hw-prim                       >= 0.0.3
+                      , hw-prim                       >= 0.1.0.0
                       , parsec
                       , vector
 
@@ -69,7 +70,7 @@
                       , bytestring
                       , hspec
                       , hw-bits
-                      , hw-prim
+                      , hw-prim                       >= 0.1.0.0
                       , QuickCheck
                       , vector
   ghc-options:          -threaded -rtsopts -with-rtsopts=-N -Wall
@@ -88,5 +89,5 @@
     Build-Depends:      base                          >= 4          && < 5
                       , criterion
                       , hw-bits
-                      , hw-prim                       >= 0.0.3
+                      , hw-prim                       >= 0.1.0.0
                       , vector
diff --git a/src/HaskellWorks/Data/Bits/BitLength.hs b/src/HaskellWorks/Data/Bits/BitLength.hs
--- a/src/HaskellWorks/Data/Bits/BitLength.hs
+++ b/src/HaskellWorks/Data/Bits/BitLength.hs
@@ -17,6 +17,7 @@
 import qualified Data.Vector                         as DV
 import qualified Data.Vector.Storable                as DVS
 import           Data.Word
+import           HaskellWorks.Data.Naive
 import           HaskellWorks.Data.Positioning
 import           HaskellWorks.Data.Vector.VectorLike
 import           Prelude                             as P
@@ -64,6 +65,22 @@
   {-# INLINE bitLength #-}
 
 instance BitLength Word64 where
+  bitLength _ = 64
+  {-# INLINE bitLength #-}
+
+instance BitLength (Naive Word8) where
+  bitLength _ = 8
+  {-# INLINE bitLength #-}
+
+instance BitLength (Naive Word16) where
+  bitLength _ = 16
+  {-# INLINE bitLength #-}
+
+instance BitLength (Naive Word32) where
+  bitLength _ = 32
+  {-# INLINE bitLength #-}
+
+instance BitLength (Naive Word64) where
   bitLength _ = 64
   {-# INLINE bitLength #-}
 
diff --git a/src/HaskellWorks/Data/Bits/BitWise.hs b/src/HaskellWorks/Data/Bits/BitWise.hs
--- a/src/HaskellWorks/Data/Bits/BitWise.hs
+++ b/src/HaskellWorks/Data/Bits/BitWise.hs
@@ -19,6 +19,7 @@
 import qualified Data.Vector.Storable                as DVS
 import           Data.Word
 import           HaskellWorks.Data.Bits.BitLength
+import           HaskellWorks.Data.Naive
 import           HaskellWorks.Data.Positioning
 import           HaskellWorks.Data.Vector.VectorLike as VL
 import           Prelude                             as P
@@ -90,6 +91,22 @@
 
 instance TestBit Word64 where
   (.?.) w n = B.testBit w (fromIntegral (getPosition n))
+  {-# INLINE (.?.) #-}
+
+instance TestBit (Naive Word8) where
+  (.?.) w n = B.testBit (naive w) (fromIntegral (getPosition n))
+  {-# INLINE (.?.) #-}
+
+instance TestBit (Naive Word16) where
+  (.?.) w n = B.testBit (naive w) (fromIntegral (getPosition n))
+  {-# INLINE (.?.) #-}
+
+instance TestBit (Naive Word32) where
+  (.?.) w n = B.testBit (naive w) (fromIntegral (getPosition n))
+  {-# INLINE (.?.) #-}
+
+instance TestBit (Naive Word64) where
+  (.?.) w n = B.testBit (naive w) (fromIntegral (getPosition n))
   {-# INLINE (.?.) #-}
 
 instance TestBit (DV.Vector Word8) where
diff --git a/src/HaskellWorks/Data/Bits/Broadword.hs b/src/HaskellWorks/Data/Bits/Broadword.hs
new file mode 100644
--- /dev/null
+++ b/src/HaskellWorks/Data/Bits/Broadword.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE ScopedTypeVariables   #-}
+{-# LANGUAGE TypeFamilies          #-}
+
+-- |
+-- Copyright: 2016 John Ky
+-- License: MIT
+--
+-- Succinct operations.
+module HaskellWorks.Data.Bits.Broadword
+  ( Broadword(..)
+  , broadword
+  , h
+  , l
+  , lsb
+  , kBitDiff
+  , kBitDiffPos
+  , kBitDiffUnsafe
+  ) where
+
+import qualified Data.Bits                        as DB
+import           Data.Word
+import           HaskellWorks.Data.Bits.BitWise
+
+newtype Broadword a = Broadword a deriving (Eq, Show)
+
+broadword :: Broadword Word64 -> Word64
+broadword (Broadword a) = a
+{-# INLINE broadword #-}
+
+l :: Int -> Word64
+l 2   = 0x5555555555555555
+l 4   = 0x1111111111111111
+l 8   = 0x0101010101010101
+l 16  = 0x0001000100010001
+l 32  = 0x0000000100000001
+l 64  = 0x0000000000000001
+l k   = error ("Invalid h k where k = " ++ show k)
+{-# INLINE l #-}
+
+h :: Int -> Word64
+h 2   = 0xaaaaaaaaaaaaaaaa
+h 4   = 0x8888888888888888
+h 8   = 0x8080808080808080
+h 16  = 0x8000800080008000
+h 32  = 0x8000000080000000
+h 64  = 0x8000000000000000
+h k   = error ("Invalid h k where k = " ++ show k)
+{-# INLINE h #-}
+
+kBitDiff :: Int -> Word64 -> Word64 -> Word64
+kBitDiff k x y = ((x .|. h k) - (y .&. comp (h k))) .^. ((x .^. comp y) .&. h k)
+{-# INLINE kBitDiff #-}
+
+kBitDiffPos :: Int -> Word64 -> Word64 -> Word64
+kBitDiffPos k x y = let d = kBitDiff k x y in d .&. ((d .>. fromIntegral (k - 1)) - 1)
+{-# INLINE kBitDiffPos #-}
+
+kBitDiffUnsafe :: Int -> Word64 -> Word64 -> Word64
+kBitDiffUnsafe k x y = ((x .|. h k) - y) .^. h k
+{-# INLINE kBitDiffUnsafe #-}
+
+lsb :: Word64 -> Word64
+lsb w = let r = fromIntegral (DB.countTrailingZeros w) in r .|. negate ((r .>. 6) .&. 0x1)
+{-# INLINE lsb #-}
