diff --git a/hw-prim.cabal b/hw-prim.cabal
--- a/hw-prim.cabal
+++ b/hw-prim.cabal
@@ -1,5 +1,5 @@
 name:                   hw-prim
-version:                0.0.3.6
+version:                0.0.3.7
 synopsis:               Primitive functions and data types
 description:            Please see README.md
 homepage:               http://github.com/haskell-works/hw-prim#readme
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
@@ -452,3 +452,123 @@
   {-# INLINE vIndex    #-}
   {-# INLINE vSlice    #-}
   {-# INLINE vUncons   #-}
+
+instance VectorLike (DVS.Vector Int8) where
+  type Elem (DVS.Vector Int8) = Int8
+
+  (!!!) v (Position i) = v DVS.! fromIntegral i
+  vConcat = DVS.concat
+  vEmpty = DVS.empty
+  vFilter = DVS.filter
+  vGenerate = DVS.generate
+  vLength = Count . fromIntegral . DVS.length
+  vEnd = Position . fromIntegral . DVS.length
+  vSnoc = DVS.snoc
+  vDrop = DVS.drop . fromIntegral
+  vTake = DVS.take . fromIntegral
+  vIndex v (Position i) = DVS.unsafeIndex v (fromIntegral i)
+  vSlice (Position i) (Position j) = DVS.unsafeSlice (fromIntegral i) (fromIntegral j)
+  vUncons s = if DVS.length s == 0 then Nothing else Just (s !!! 0, vDrop 1 s)
+  {-# INLINE (!!!)     #-}
+  {-# INLINE vConcat   #-}
+  {-# INLINE vEmpty    #-}
+  {-# INLINE vFilter   #-}
+  {-# INLINE vGenerate #-}
+  {-# INLINE vLength   #-}
+  {-# INLINE vEnd      #-}
+  {-# INLINE vSnoc     #-}
+  {-# INLINE vDrop     #-}
+  {-# INLINE vTake     #-}
+  {-# INLINE vIndex    #-}
+  {-# INLINE vSlice    #-}
+  {-# INLINE vUncons   #-}
+
+instance VectorLike (DVS.Vector Int16) where
+  type Elem (DVS.Vector Int16) = Int16
+
+  (!!!) v (Position i) = v DVS.! fromIntegral i
+  vConcat = DVS.concat
+  vEmpty = DVS.empty
+  vFilter = DVS.filter
+  vGenerate = DVS.generate
+  vLength = Count . fromIntegral . DVS.length
+  vEnd = Position . fromIntegral . DVS.length
+  vSnoc = DVS.snoc
+  vDrop = DVS.drop . fromIntegral
+  vTake = DVS.take . fromIntegral
+  vIndex v (Position i) = DVS.unsafeIndex v (fromIntegral i)
+  vSlice (Position i) (Position j) = DVS.unsafeSlice (fromIntegral i) (fromIntegral j)
+  vUncons s = if DVS.length s == 0 then Nothing else Just (s !!! 0, vDrop 1 s)
+  {-# INLINE (!!!)     #-}
+  {-# INLINE vConcat   #-}
+  {-# INLINE vEmpty    #-}
+  {-# INLINE vFilter   #-}
+  {-# INLINE vGenerate #-}
+  {-# INLINE vLength   #-}
+  {-# INLINE vEnd      #-}
+  {-# INLINE vSnoc     #-}
+  {-# INLINE vDrop     #-}
+  {-# INLINE vTake     #-}
+  {-# INLINE vIndex    #-}
+  {-# INLINE vSlice    #-}
+  {-# INLINE vUncons   #-}
+
+instance VectorLike (DVS.Vector Int32) where
+  type Elem (DVS.Vector Int32) = Int32
+
+  (!!!) v (Position i) = v DVS.! fromIntegral i
+  vConcat = DVS.concat
+  vEmpty = DVS.empty
+  vFilter = DVS.filter
+  vGenerate = DVS.generate
+  vLength = Count . fromIntegral . DVS.length
+  vEnd = Position . fromIntegral . DVS.length
+  vSnoc = DVS.snoc
+  vDrop = DVS.drop . fromIntegral
+  vTake = DVS.take . fromIntegral
+  vIndex v (Position i) = DVS.unsafeIndex v (fromIntegral i)
+  vSlice (Position i) (Position j) = DVS.unsafeSlice (fromIntegral i) (fromIntegral j)
+  vUncons s = if DVS.length s == 0 then Nothing else Just (s !!! 0, vDrop 1 s)
+  {-# INLINE (!!!)     #-}
+  {-# INLINE vConcat   #-}
+  {-# INLINE vEmpty    #-}
+  {-# INLINE vFilter   #-}
+  {-# INLINE vGenerate #-}
+  {-# INLINE vLength   #-}
+  {-# INLINE vEnd      #-}
+  {-# INLINE vSnoc     #-}
+  {-# INLINE vDrop     #-}
+  {-# INLINE vTake     #-}
+  {-# INLINE vIndex    #-}
+  {-# INLINE vSlice    #-}
+  {-# INLINE vUncons   #-}
+
+instance VectorLike (DVS.Vector Int64) where
+  type Elem (DVS.Vector Int64) = Int64
+
+  (!!!) v (Position i) = v DVS.! fromIntegral i
+  vConcat = DVS.concat
+  vEmpty = DVS.empty
+  vFilter = DVS.filter
+  vGenerate = DVS.generate
+  vLength = Count . fromIntegral . DVS.length
+  vEnd = Position . fromIntegral . DVS.length
+  vSnoc = DVS.snoc
+  vDrop = DVS.drop . fromIntegral
+  vTake = DVS.take . fromIntegral
+  vIndex v (Position i) = DVS.unsafeIndex v (fromIntegral i)
+  vSlice (Position i) (Position j) = DVS.unsafeSlice (fromIntegral i) (fromIntegral j)
+  vUncons s = if DVS.length s == 0 then Nothing else Just (s !!! 0, vDrop 1 s)
+  {-# INLINE (!!!)     #-}
+  {-# INLINE vConcat   #-}
+  {-# INLINE vEmpty    #-}
+  {-# INLINE vFilter   #-}
+  {-# INLINE vGenerate #-}
+  {-# INLINE vLength   #-}
+  {-# INLINE vEnd      #-}
+  {-# INLINE vSnoc     #-}
+  {-# INLINE vDrop     #-}
+  {-# INLINE vTake     #-}
+  {-# INLINE vIndex    #-}
+  {-# INLINE vSlice    #-}
+  {-# INLINE vUncons   #-}
