diff --git a/bench/Main.hs b/bench/Main.hs
--- a/bench/Main.hs
+++ b/bench/Main.hs
@@ -1,20 +1,24 @@
 module Main where
 
 import           Criterion.Main
-import qualified Data.ByteString                                     as BS
-
-setupEnvBs :: Int -> IO BS.ByteString
-setupEnvBs n = return $ BS.pack (take n (cycle [maxBound, 0]))
+import qualified Data.Vector.Storable                      as DVS
+import           Data.Word
+import           HaskellWorks.Data.Bits.PopCount.PopCount1
+import           HaskellWorks.Data.Bits.Types.Broadword
+import           HaskellWorks.Data.Bits.Types.Builtin
+import           HaskellWorks.Data.Positioning
 
-setupEnvBss :: Int -> Int -> IO [BS.ByteString]
-setupEnvBss n k = setupEnvBs n >>= \v -> return (replicate k v)
+setupEnvVector :: Int -> IO (DVS.Vector Word64)
+setupEnvVector n = return $ DVS.fromList (take n (cycle [maxBound, 0]))
 
-benchIdentity :: [Benchmark]
-benchIdentity =
-  [ env (setupEnvBss 4060 19968) $ \_ -> bgroup "Rank"
-    [ bench "Rechunk"   (whnf id "")
+benchPopCount1 :: [Benchmark]
+benchPopCount1 =
+  [ env (setupEnvVector 1000000) $ \bv -> bgroup "PopCount1"
+    [ bench "Broadword" (nf (map (\n -> getCount (popCount1 (DVS.take n (DVS.unsafeCast bv :: DVS.Vector (Broadword Word64)))))) [0, 1000..100000])
+    , bench "Builtin"   (nf (map (\n -> getCount (popCount1 (DVS.take n (DVS.unsafeCast bv :: DVS.Vector (Builtin   Word64)))))) [0, 1000..100000])
+    , bench "Default"   (nf (map (\n -> getCount (popCount1 (DVS.take n (DVS.unsafeCast bv :: DVS.Vector            Word64 ))))) [0, 1000..100000])
     ]
   ]
 
 main :: IO ()
-main = defaultMain benchIdentity
+main = defaultMain benchPopCount1
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.2
+version:                0.0.0.3
 synopsis:               Conduits for tokenizing streams.
 description:            Please see README.md
 homepage:               http://github.com/haskell-works/hw-bits#readme
@@ -18,21 +18,19 @@
   hs-source-dirs:       app
   main-is:              Main.hs
   ghc-options:          -threaded -rtsopts -with-rtsopts=-N -Wall -msse4.2
-  build-depends:        base            >= 4       && < 5   ,
-                        bytestring                          ,
-                        conduit                             ,
-                        criterion       >= 1.1.0.0 && < 1.2 ,
-                        hw-bits                         ,
-                        mmap                                ,
-                        resourcet                           ,
-                        vector          >= 0.6     && < 0.12
+  build-depends:        base            >= 4       && < 5
+                      , bytestring
+                      , conduit
+                      , criterion
+                      , hw-bits
+                      , mmap
+                      , resourcet
+                      , vector
   default-language:     Haskell2010
 
 library
   hs-source-dirs:       src
-  exposed-modules:      HaskellWorks.Data.Attoparsec.Final.IsChar
-                      , HaskellWorks.Data.Attoparsec.Final.Parser
-                      , HaskellWorks.Data.Bits
+  exposed-modules:      HaskellWorks.Data.Bits
                       , HaskellWorks.Data.Bits.BitLength
                       , HaskellWorks.Data.Bits.BitParse
                       , HaskellWorks.Data.Bits.BitRead
@@ -44,8 +42,8 @@
                       , HaskellWorks.Data.Bits.PopCount
                       , HaskellWorks.Data.Bits.PopCount.PopCount0
                       , HaskellWorks.Data.Bits.PopCount.PopCount1
-                      , HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword
-                      , HaskellWorks.Data.Bits.PopCount.PopCount1.GHC
+                      , HaskellWorks.Data.Bits.Types.Broadword
+                      , HaskellWorks.Data.Bits.Types.Builtin
                       , HaskellWorks.Data.ByteString
                       , HaskellWorks.Data.FromByteString
                       , HaskellWorks.Data.FromForeignRegion
@@ -57,10 +55,10 @@
                       , HaskellWorks.Data.Word
   build-depends:        base                            >= 4.7  && < 5
                       , array
-                      , attoparsec                      >= 0.10
+                      , attoparsec
                       , bytestring
-                      , conduit                         >= 1.1  && < 1.3
-                      , deepseq                         <  1.5
+                      , conduit
+                      , deepseq
                       , ghc-prim
                       , lens
                       , mmap
@@ -68,14 +66,14 @@
                       , parsec
                       , QuickCheck
                       , random
-                      , resourcet                       >= 1.1
+                      , resourcet
                       , safe
                       , text
                       , vector
                       , word8
 
   default-language:     Haskell2010
-  ghc-options:          -rtsopts -with-rtsopts=-N -Wall -O2 -Wall -msse4.2
+  ghc-options:          -rtsopts -with-rtsopts=-N -Wall -O2 -msse4.2
 
 test-suite hw-bits-test
   type:                 exitcode-stdio-1.0
@@ -84,15 +82,15 @@
   other-modules:        HaskellWorks.Data.Bits.BitReadSpec
                       , HaskellWorks.Data.Bits.BitWiseSpec
   build-depends:        base
-                      , attoparsec                      >= 0.10
+                      , attoparsec
                       , bytestring
-                      , conduit                         >= 1.1  && < 1.3
-                      , hspec                           >= 1.3
+                      , conduit
+                      , hspec
                       , hw-bits
                       , mmap
                       , parsec
                       , QuickCheck
-                      , resourcet                       >= 1.1
+                      , resourcet
                       , transformers
                       , vector
   ghc-options:          -threaded -rtsopts -with-rtsopts=-N -Wall
@@ -106,14 +104,13 @@
     Type: exitcode-stdio-1.0
     HS-Source-Dirs: bench
     Main-Is: Main.hs
-    GHC-Options: -O2 -Wall -msse4.2
+    GHC-Options: -Wall -O2 -msse4.2
     Default-Language: Haskell2010
-    Build-Depends:
-        base            >= 4       && < 5   ,
-        bytestring                          ,
-        conduit                             ,
-        criterion       >= 1.1.0.0 && < 1.2 ,
-        hw-bits                         ,
-        mmap                                ,
-        resourcet                           ,
-        vector          >= 0.6     && < 0.12
+    Build-Depends:      base            >= 4       && < 5
+                      , bytestring
+                      , conduit
+                      , criterion
+                      , hw-bits
+                      , mmap
+                      , resourcet
+                      , vector
diff --git a/src/HaskellWorks/Data/Attoparsec/Final/IsChar.hs b/src/HaskellWorks/Data/Attoparsec/Final/IsChar.hs
deleted file mode 100644
--- a/src/HaskellWorks/Data/Attoparsec/Final/IsChar.hs
+++ /dev/null
@@ -1,15 +0,0 @@
-module HaskellWorks.Data.Attoparsec.Final.IsChar
-    ( IsChar(..)
-    ) where
-
-import qualified Data.ByteString.Internal as BI
-import           Data.Word8
-
-class IsChar c where
-  toChar :: c -> Char
-
-instance IsChar Word8 where
-  toChar = BI.w2c
-
-instance IsChar Char where
-  toChar = id
diff --git a/src/HaskellWorks/Data/Attoparsec/Final/Parser.hs b/src/HaskellWorks/Data/Attoparsec/Final/Parser.hs
deleted file mode 100644
--- a/src/HaskellWorks/Data/Attoparsec/Final/Parser.hs
+++ /dev/null
@@ -1,42 +0,0 @@
-module HaskellWorks.Data.Attoparsec.Final.Parser
-  ( Parser(..)
-  ) where
-
-import qualified Data.Attoparsec.ByteString                as ABS
-import qualified Data.Attoparsec.ByteString.Char8          as BC
-import qualified Data.Attoparsec.Text                      as AT
-import qualified Data.Attoparsec.Types                     as T
-import           Data.ByteString                           (ByteString)
-import           Data.MonoTraversable
-import           Data.Text                                 (Text)
-import           HaskellWorks.Data.Attoparsec.Final.IsChar
-
-class MonoTraversable t => Parser t where
-  satisfy :: (Element t -> Bool) -> T.Parser t (Element t)
-  satisfyWith :: (Element t -> a) -> (a -> Bool) -> T.Parser t a
-  satisfyChar :: (Char -> Bool) -> T.Parser t Char
-  string :: t -> T.Parser t t
-  try :: T.Parser t a -> T.Parser t a
-  char :: Char -> T.Parser t Char
-  (<?>) :: T.Parser t Char -> String -> T.Parser t Char
-  rational :: Fractional f => T.Parser t f
-
-instance Parser ByteString where
-  satisfy = ABS.satisfy
-  satisfyWith = ABS.satisfyWith
-  satisfyChar = ABS.satisfyWith toChar
-  string = ABS.string
-  try = ABS.try
-  char = BC.char
-  (<?>) = (BC.<?>)
-  rational = BC.rational
-
-instance Parser Text where
-  satisfy = AT.satisfy
-  satisfyWith = AT.satisfyWith
-  satisfyChar = AT.satisfyWith toChar
-  string = AT.string
-  try = AT.try
-  char = AT.char
-  (<?>) = (AT.<?>)
-  rational = AT.rational
diff --git a/src/HaskellWorks/Data/Bits/PopCount/PopCount1.hs b/src/HaskellWorks/Data/Bits/PopCount/PopCount1.hs
--- a/src/HaskellWorks/Data/Bits/PopCount/PopCount1.hs
+++ b/src/HaskellWorks/Data/Bits/PopCount/PopCount1.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE FlexibleInstances     #-}
 
 -- |
 -- Copyright: 2016 John Ky
@@ -5,7 +6,105 @@
 --
 -- Succinct operations.
 module HaskellWorks.Data.Bits.PopCount.PopCount1
-    ( module X
+    ( PopCount1(..)
     ) where
 
-import           HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword as X
+import qualified Data.Bits                              as DB
+import qualified Data.Vector                            as DV
+import qualified Data.Vector.Storable                   as DVS
+import           Data.Word
+import           HaskellWorks.Data.Bits.BitWise
+import           HaskellWorks.Data.Bits.Types.Broadword
+import           HaskellWorks.Data.Bits.Types.Builtin
+import           HaskellWorks.Data.Positioning
+import           Prelude                                as P
+
+type FastWord a = Builtin a
+
+fastWord :: a -> FastWord a
+fastWord = Builtin
+{-# INLINE fastWord #-}
+
+class PopCount1 v where
+  popCount1 :: v -> Count
+
+instance PopCount1 Bool where
+  popCount1 True  = 1
+  popCount1 False = 0
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 (Broadword Word8) where
+  popCount1 (Broadword x0) = Count (fromIntegral x3)
+    where
+      x1 = x0 - ((x0 .&. 0xaa) .>. 1)
+      x2 = (x1 .&. 0x33) + ((x1 .>. 2) .&. 0x33)
+      x3 = (x2 + (x2 .>. 4)) .&. 0x0f
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 (Broadword Word16) where
+  popCount1 (Broadword x0) = Count (fromIntegral ((x3 * 0x0101) .>. 8))
+    where
+      x1 = x0 - ((x0 .&. 0xaaaa) .>. 1)
+      x2 = (x1 .&. 0x3333) + ((x1 .>. 2) .&. 0x3333)
+      x3 = (x2 + (x2 .>. 4)) .&. 0x0f0f
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 (Broadword Word32) where
+  popCount1 (Broadword x0) = Count (fromIntegral ((x3 * 0x01010101) .>. 24))
+    where
+      x1 = x0 - ((x0 .&. 0xaaaaaaaa) .>. 1)
+      x2 = (x1 .&. 0x33333333) + ((x1 .>. 2) .&. 0x33333333)
+      x3 = (x2 + (x2 .>. 4)) .&. 0x0f0f0f0f
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 (Broadword Word64) where
+  popCount1 (Broadword x0) = Count ((x3 * 0x0101010101010101) .>. 56)
+    where
+      x1 = x0 - ((x0 .&. 0xaaaaaaaaaaaaaaaa) .>. 1)
+      x2 = (x1 .&. 0x3333333333333333) + ((x1 .>. 2) .&. 0x3333333333333333)
+      x3 = (x2 + (x2 .>. 4)) .&. 0x0f0f0f0f0f0f0f0f
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 (Builtin Word8) where
+  popCount1 (Builtin x0) = fromIntegral (DB.popCount x0)
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 (Builtin Word16) where
+  popCount1 (Builtin x0) = fromIntegral (DB.popCount x0)
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 (Builtin Word32) where
+  popCount1 (Builtin x0) = fromIntegral (DB.popCount x0)
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 (Builtin Word64) where
+  popCount1 (Builtin x0) = fromIntegral (DB.popCount x0)
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 Word8 where
+  popCount1 = fromIntegral . popCount1 . fastWord
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 Word16 where
+  popCount1 = fromIntegral . popCount1 . fastWord
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 Word32 where
+  popCount1 = fromIntegral . popCount1 . fastWord
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 Word64 where
+  popCount1 = fromIntegral . popCount1 . fastWord
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 a => PopCount1 [a] where
+  popCount1 = P.sum . fmap popCount1
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 a => PopCount1 (DV.Vector a) where
+  popCount1 = DV.foldl (\c -> (c +) . popCount1) 0
+  {-# INLINE popCount1 #-}
+
+instance (PopCount1 a, DVS.Storable a) => PopCount1 (DVS.Vector a) where
+  popCount1 = DVS.foldl (\c -> (c +) . popCount1) 0
+  {-# INLINE popCount1 #-}
diff --git a/src/HaskellWorks/Data/Bits/PopCount/PopCount1/Broadword.hs b/src/HaskellWorks/Data/Bits/PopCount/PopCount1/Broadword.hs
deleted file mode 100644
--- a/src/HaskellWorks/Data/Bits/PopCount/PopCount1/Broadword.hs
+++ /dev/null
@@ -1,111 +0,0 @@
-{-# LANGUAGE FlexibleInstances     #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE TypeFamilies          #-}
-
--- |
--- Copyright: 2016 John Ky
--- License: MIT
---
--- Succinct operations.
-module HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword
-    ( PopCount1(..)
-    ) where
-
-import qualified Data.Vector                    as DV
-import qualified Data.Vector.Storable           as DVS
-import           Data.Word
-import           HaskellWorks.Data.Bits.BitWise
-import           HaskellWorks.Data.Positioning
-import           Prelude                        as P
-
-class PopCount1 v where
-  popCount1 :: v -> Count
-
-instance PopCount1 Bool where
-  popCount1 True  = 1
-  popCount1 False = 0
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 Word8 where
-  popCount1 x0 = Count (fromIntegral x3)
-    where
-      x1 = x0 - ((x0 .&. 0xaa) .>. 1)
-      x2 = (x1 .&. 0x33) + ((x1 .>. 2) .&. 0x33)
-      x3 = (x2 + (x2 .>. 4)) .&. 0x0f
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 Word16 where
-  popCount1 x0 = Count (fromIntegral ((x3 * 0x0101) .>. 8))
-    where
-      x1 = x0 - ((x0 .&. 0xaaaa) .>. 1)
-      x2 = (x1 .&. 0x3333) + ((x1 .>. 2) .&. 0x3333)
-      x3 = (x2 + (x2 .>. 4)) .&. 0x0f0f
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 Word32 where
-  popCount1 x0 = Count (fromIntegral ((x3 * 0x01010101) .>. 24))
-    where
-      x1 = x0 - ((x0 .&. 0xaaaaaaaa) .>. 1)
-      x2 = (x1 .&. 0x33333333) + ((x1 .>. 2) .&. 0x33333333)
-      x3 = (x2 + (x2 .>. 4)) .&. 0x0f0f0f0f
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 Word64 where
-  popCount1 x0 = Count ((x3 * 0x0101010101010101) .>. 56)
-    where
-      x1 = x0 - ((x0 .&. 0xaaaaaaaaaaaaaaaa) .>. 1)
-      x2 = (x1 .&. 0x3333333333333333) + ((x1 .>. 2) .&. 0x3333333333333333)
-      x3 = (x2 + (x2 .>. 4)) .&. 0x0f0f0f0f0f0f0f0f
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 [Bool] where
-  popCount1 = P.sum . fmap popCount1
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 [Word8] where
-  popCount1 = P.sum . fmap popCount1
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 [Word16] where
-  popCount1 = P.sum . fmap popCount1
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 [Word32] where
-  popCount1 = P.sum . fmap popCount1
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 [Word64] where
-  popCount1 = P.sum . fmap popCount1
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 (DV.Vector Word8) where
-  popCount1 = DV.foldl (\c -> (c +) . popCount1) 0
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 (DV.Vector Word16) where
-  popCount1 = DV.foldl (\c -> (c +) . popCount1) 0
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 (DV.Vector Word32) where
-  popCount1 = DV.foldl (\c -> (c +) . popCount1) 0
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 (DV.Vector Word64) where
-  popCount1 = DV.foldl (\c -> (c +) . popCount1) 0
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 (DVS.Vector Word8) where
-  popCount1 = DVS.foldl (\c -> (c +) . popCount1) 0
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 (DVS.Vector Word16) where
-  popCount1 = DVS.foldl (\c -> (c +) . popCount1) 0
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 (DVS.Vector Word32) where
-  popCount1 = DVS.foldl (\c -> (c +) . popCount1) 0
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 (DVS.Vector Word64) where
-  popCount1 = DVS.foldl (\c -> (c +) . popCount1) 0
-  {-# INLINABLE popCount1 #-}
diff --git a/src/HaskellWorks/Data/Bits/PopCount/PopCount1/GHC.hs b/src/HaskellWorks/Data/Bits/PopCount/PopCount1/GHC.hs
deleted file mode 100644
--- a/src/HaskellWorks/Data/Bits/PopCount/PopCount1/GHC.hs
+++ /dev/null
@@ -1,95 +0,0 @@
-{-# LANGUAGE FlexibleInstances     #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE TypeFamilies          #-}
-
--- |
--- Copyright: 2016 John Ky
--- License: MIT
---
--- Succinct operations.
-module HaskellWorks.Data.Bits.PopCount.PopCount1.GHC
-    ( PopCount1(..)
-    ) where
-
-import qualified Data.Bits                     as DB
-import qualified Data.Vector                   as DV
-import qualified Data.Vector.Storable          as DVS
-import           Data.Word
-import           HaskellWorks.Data.Positioning
-import           Prelude                       as P
-
-class PopCount1 v where
-  popCount1 :: v -> Count
-
-instance PopCount1 Bool where
-  popCount1 True  = 1
-  popCount1 False = 0
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 Word8 where
-  popCount1 = fromIntegral . DB.popCount
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 Word16 where
-  popCount1 = fromIntegral . DB.popCount
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 Word32 where
-  popCount1 = fromIntegral . DB.popCount
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 Word64 where
-  popCount1 = fromIntegral . DB.popCount
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 [Bool] where
-  popCount1 = P.sum . fmap popCount1
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 [Word8] where
-  popCount1 = P.sum . fmap popCount1
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 [Word16] where
-  popCount1 = P.sum . fmap popCount1
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 [Word32] where
-  popCount1 = P.sum . fmap popCount1
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 [Word64] where
-  popCount1 = P.sum . fmap popCount1
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 (DV.Vector Word8) where
-  popCount1 = DV.foldl (\c -> (c +) . popCount1) 0
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 (DV.Vector Word16) where
-  popCount1 = DV.foldl (\c -> (c +) . popCount1) 0
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 (DV.Vector Word32) where
-  popCount1 = DV.foldl (\c -> (c +) . popCount1) 0
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 (DV.Vector Word64) where
-  popCount1 = DV.foldl (\c -> (c +) . popCount1) 0
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 (DVS.Vector Word8) where
-  popCount1 = DVS.foldl (\c -> (c +) . popCount1) 0
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 (DVS.Vector Word16) where
-  popCount1 = DVS.foldl (\c -> (c +) . popCount1) 0
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 (DVS.Vector Word32) where
-  popCount1 = DVS.foldl (\c -> (c +) . popCount1) 0
-  {-# INLINABLE popCount1 #-}
-
-instance PopCount1 (DVS.Vector Word64) where
-  popCount1 = DVS.foldl (\c -> (c +) . popCount1) 0
-  {-# INLINABLE popCount1 #-}
diff --git a/src/HaskellWorks/Data/Bits/Types/Broadword.hs b/src/HaskellWorks/Data/Bits/Types/Broadword.hs
new file mode 100644
--- /dev/null
+++ b/src/HaskellWorks/Data/Bits/Types/Broadword.hs
@@ -0,0 +1,7 @@
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+
+module HaskellWorks.Data.Bits.Types.Broadword where
+
+import Data.Vector.Storable
+
+newtype Broadword a = Broadword a deriving (Eq, Show, Storable)
diff --git a/src/HaskellWorks/Data/Bits/Types/Builtin.hs b/src/HaskellWorks/Data/Bits/Types/Builtin.hs
new file mode 100644
--- /dev/null
+++ b/src/HaskellWorks/Data/Bits/Types/Builtin.hs
@@ -0,0 +1,7 @@
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+
+module HaskellWorks.Data.Bits.Types.Builtin where
+
+import Data.Vector.Storable
+
+newtype Builtin a = Builtin a deriving (Eq, Show, Storable)
diff --git a/src/HaskellWorks/Data/Vector/VectorLike.hs b/src/HaskellWorks/Data/Vector/VectorLike.hs
--- a/src/HaskellWorks/Data/Vector/VectorLike.hs
+++ b/src/HaskellWorks/Data/Vector/VectorLike.hs
@@ -43,19 +43,19 @@
   vTake = take . fromIntegral
   vIndex v (Position i) = v !! fromIntegral i
   vSlice (Position i) (Position j) = take (fromIntegral j) . drop (fromIntegral i)
-  {-# INLINABLE vToList #-}
+  {-# INLINABLE vToList   #-}
   {-# INLINABLE vFromList #-}
-  {-# INLINABLE (!!!) #-}
-  {-# INLINABLE vConcat #-}
-  {-# INLINABLE vEmpty #-}
-  {-# INLINABLE vFilter #-}
+  {-# INLINABLE (!!!)     #-}
+  {-# INLINABLE vConcat   #-}
+  {-# INLINABLE vEmpty    #-}
+  {-# INLINABLE vFilter   #-}
   {-# INLINABLE vGenerate #-}
-  {-# INLINABLE vLength #-}
-  {-# INLINABLE vSnoc #-}
-  {-# INLINABLE vDrop #-}
-  {-# INLINABLE vTake #-}
-  {-# INLINABLE vIndex #-}
-  {-# INLINABLE vSlice #-}
+  {-# INLINABLE vLength   #-}
+  {-# INLINABLE vSnoc     #-}
+  {-# INLINABLE vDrop     #-}
+  {-# INLINABLE vTake     #-}
+  {-# INLINABLE vIndex    #-}
+  {-# INLINABLE vSlice    #-}
 
 instance VectorLike BS.ByteString where
   type Elem BS.ByteString = Word8
@@ -74,19 +74,19 @@
   vTake = BS.take . fromIntegral
   vIndex v (Position i) = BS.index v (fromIntegral i)
   vSlice (Position i) (Position j) = BS.take (fromIntegral j) . BS.drop (fromIntegral i)
-  {-# INLINABLE vToList #-}
+  {-# INLINABLE vToList   #-}
   {-# INLINABLE vFromList #-}
-  {-# INLINABLE (!!!) #-}
-  {-# INLINABLE vConcat #-}
-  {-# INLINABLE vEmpty #-}
-  {-# INLINABLE vFilter #-}
+  {-# INLINABLE (!!!)     #-}
+  {-# INLINABLE vConcat   #-}
+  {-# INLINABLE vEmpty    #-}
+  {-# INLINABLE vFilter   #-}
   {-# INLINABLE vGenerate #-}
-  {-# INLINABLE vLength #-}
-  {-# INLINABLE vSnoc #-}
-  {-# INLINABLE vDrop #-}
-  {-# INLINABLE vTake #-}
-  {-# INLINABLE vIndex #-}
-  {-# INLINABLE vSlice #-}
+  {-# INLINABLE vLength   #-}
+  {-# INLINABLE vSnoc     #-}
+  {-# INLINABLE vDrop     #-}
+  {-# INLINABLE vTake     #-}
+  {-# INLINABLE vIndex    #-}
+  {-# INLINABLE vSlice    #-}
 
 instance VectorLike (DV.Vector Word8) where
   type Elem (DV.Vector Word8) = Word8
@@ -104,19 +104,19 @@
   vTake = DV.take . fromIntegral
   vIndex v (Position i) = DV.unsafeIndex v (fromIntegral i)
   vSlice (Position i) (Position j) = DV.unsafeSlice (fromIntegral i) (fromIntegral j)
-  {-# INLINABLE vToList #-}
+  {-# INLINABLE vToList   #-}
   {-# INLINABLE vFromList #-}
-  {-# INLINABLE (!!!) #-}
-  {-# INLINABLE vConcat #-}
-  {-# INLINABLE vEmpty #-}
-  {-# INLINABLE vFilter #-}
+  {-# INLINABLE (!!!)     #-}
+  {-# INLINABLE vConcat   #-}
+  {-# INLINABLE vEmpty    #-}
+  {-# INLINABLE vFilter   #-}
   {-# INLINABLE vGenerate #-}
-  {-# INLINABLE vLength #-}
-  {-# INLINABLE vSnoc #-}
-  {-# INLINABLE vDrop #-}
-  {-# INLINABLE vTake #-}
-  {-# INLINABLE vIndex #-}
-  {-# INLINABLE vSlice #-}
+  {-# INLINABLE vLength   #-}
+  {-# INLINABLE vSnoc     #-}
+  {-# INLINABLE vDrop     #-}
+  {-# INLINABLE vTake     #-}
+  {-# INLINABLE vIndex    #-}
+  {-# INLINABLE vSlice    #-}
 
 instance VectorLike (DV.Vector Word16) where
   type Elem (DV.Vector Word16) = Word16
@@ -134,19 +134,19 @@
   vTake = DV.take . fromIntegral
   vIndex v (Position i) = DV.unsafeIndex v (fromIntegral i)
   vSlice (Position i) (Position j) = DV.unsafeSlice (fromIntegral i) (fromIntegral j)
-  {-# INLINABLE vToList #-}
+  {-# INLINABLE vToList   #-}
   {-# INLINABLE vFromList #-}
-  {-# INLINABLE (!!!) #-}
-  {-# INLINABLE vConcat #-}
-  {-# INLINABLE vEmpty #-}
-  {-# INLINABLE vFilter #-}
+  {-# INLINABLE (!!!)     #-}
+  {-# INLINABLE vConcat   #-}
+  {-# INLINABLE vEmpty    #-}
+  {-# INLINABLE vFilter   #-}
   {-# INLINABLE vGenerate #-}
-  {-# INLINABLE vLength #-}
-  {-# INLINABLE vSnoc #-}
-  {-# INLINABLE vDrop #-}
-  {-# INLINABLE vTake #-}
-  {-# INLINABLE vIndex #-}
-  {-# INLINABLE vSlice #-}
+  {-# INLINABLE vLength   #-}
+  {-# INLINABLE vSnoc     #-}
+  {-# INLINABLE vDrop     #-}
+  {-# INLINABLE vTake     #-}
+  {-# INLINABLE vIndex    #-}
+  {-# INLINABLE vSlice    #-}
 
 instance VectorLike (DV.Vector Word32) where
   type Elem (DV.Vector Word32) = Word32
@@ -164,19 +164,19 @@
   vTake = DV.take . fromIntegral
   vIndex v (Position i) = DV.unsafeIndex v (fromIntegral i)
   vSlice (Position i) (Position j) = DV.unsafeSlice (fromIntegral i) (fromIntegral j)
-  {-# INLINABLE vToList #-}
+  {-# INLINABLE vToList   #-}
   {-# INLINABLE vFromList #-}
-  {-# INLINABLE (!!!) #-}
-  {-# INLINABLE vConcat #-}
-  {-# INLINABLE vEmpty #-}
-  {-# INLINABLE vFilter #-}
+  {-# INLINABLE (!!!)     #-}
+  {-# INLINABLE vConcat   #-}
+  {-# INLINABLE vEmpty    #-}
+  {-# INLINABLE vFilter   #-}
   {-# INLINABLE vGenerate #-}
-  {-# INLINABLE vLength #-}
-  {-# INLINABLE vSnoc #-}
-  {-# INLINABLE vDrop #-}
-  {-# INLINABLE vTake #-}
-  {-# INLINABLE vIndex #-}
-  {-# INLINABLE vSlice #-}
+  {-# INLINABLE vLength   #-}
+  {-# INLINABLE vSnoc     #-}
+  {-# INLINABLE vDrop     #-}
+  {-# INLINABLE vTake     #-}
+  {-# INLINABLE vIndex    #-}
+  {-# INLINABLE vSlice    #-}
 
 instance VectorLike (DV.Vector Word64) where
   type Elem (DV.Vector Word64) = Word64
@@ -194,19 +194,19 @@
   vTake = DV.take . fromIntegral
   vIndex v (Position i) = DV.unsafeIndex v (fromIntegral i)
   vSlice (Position i) (Position j) = DV.unsafeSlice (fromIntegral i) (fromIntegral j)
-  {-# INLINABLE vToList #-}
+  {-# INLINABLE vToList   #-}
   {-# INLINABLE vFromList #-}
-  {-# INLINABLE (!!!) #-}
-  {-# INLINABLE vConcat #-}
-  {-# INLINABLE vEmpty #-}
-  {-# INLINABLE vFilter #-}
+  {-# INLINABLE (!!!)     #-}
+  {-# INLINABLE vConcat   #-}
+  {-# INLINABLE vEmpty    #-}
+  {-# INLINABLE vFilter   #-}
   {-# INLINABLE vGenerate #-}
-  {-# INLINABLE vLength #-}
-  {-# INLINABLE vSnoc #-}
-  {-# INLINABLE vDrop #-}
-  {-# INLINABLE vTake #-}
-  {-# INLINABLE vIndex #-}
-  {-# INLINABLE vSlice #-}
+  {-# INLINABLE vLength   #-}
+  {-# INLINABLE vSnoc     #-}
+  {-# INLINABLE vDrop     #-}
+  {-# INLINABLE vTake     #-}
+  {-# INLINABLE vIndex    #-}
+  {-# INLINABLE vSlice    #-}
 
 instance VectorLike (DVS.Vector Word8) where
   type Elem (DVS.Vector Word8) = Word8
@@ -224,19 +224,19 @@
   vTake = DVS.take . fromIntegral
   vIndex v (Position i) = DVS.unsafeIndex v (fromIntegral i)
   vSlice (Position i) (Position j) = DVS.unsafeSlice (fromIntegral i) (fromIntegral j)
-  {-# INLINABLE vToList #-}
+  {-# INLINABLE vToList   #-}
   {-# INLINABLE vFromList #-}
-  {-# INLINABLE (!!!) #-}
-  {-# INLINABLE vConcat #-}
-  {-# INLINABLE vEmpty #-}
-  {-# INLINABLE vFilter #-}
+  {-# INLINABLE (!!!)     #-}
+  {-# INLINABLE vConcat   #-}
+  {-# INLINABLE vEmpty    #-}
+  {-# INLINABLE vFilter   #-}
   {-# INLINABLE vGenerate #-}
-  {-# INLINABLE vLength #-}
-  {-# INLINABLE vSnoc #-}
-  {-# INLINABLE vDrop #-}
-  {-# INLINABLE vTake #-}
-  {-# INLINABLE vIndex #-}
-  {-# INLINABLE vSlice #-}
+  {-# INLINABLE vLength   #-}
+  {-# INLINABLE vSnoc     #-}
+  {-# INLINABLE vDrop     #-}
+  {-# INLINABLE vTake     #-}
+  {-# INLINABLE vIndex    #-}
+  {-# INLINABLE vSlice    #-}
 
 instance VectorLike (DVS.Vector Word16) where
   type Elem (DVS.Vector Word16) = Word16
