diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -3,6 +3,4 @@
 
 Primitive types library.
 
-To build with GHC 8: `nix-build --arg compiler \"ghc801\"`
-
 Report dependency build errors: https://github.com/haskell-infra/hackage-trustees
diff --git a/app/Main.hs b/app/Main.hs
deleted file mode 100644
--- a/app/Main.hs
+++ /dev/null
@@ -1,4 +0,0 @@
-module Main where
-
-main :: IO ()
-main = print "Hello world"
diff --git a/bench/Main.hs b/bench/Main.hs
deleted file mode 100644
--- a/bench/Main.hs
+++ /dev/null
@@ -1,16 +0,0 @@
-module Main where
-
-import           Criterion.Main
-import qualified Data.Vector.Storable                      as DVS
-import           Data.Word
-
-setupEnvVector :: Int -> IO (DVS.Vector Word64)
-setupEnvVector n = return $ DVS.fromList (take n (cycle [maxBound, 0]))
-
-benchPopCount1 :: [Benchmark]
-benchPopCount1 =
-  [
-  ]
-
-main :: IO ()
-main = defaultMain benchPopCount1
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.4.0.0
+version:                0.4.0.1
 synopsis:               Primitive functions and data types
 description:            Please see README.md
 homepage:               http://github.com/haskell-works/hw-prim#readme
@@ -14,14 +14,6 @@
 extra-source-files:     README.md
 cabal-version:          >= 1.22
 
-executable hw-prim-example
-  hs-source-dirs:       app
-  main-is:              Main.hs
-  ghc-options:          -threaded -rtsopts -with-rtsopts=-N -Wall -msse4.2
-  build-depends:        base                          >= 4          && < 5
-                      , hw-prim
-  default-language:     Haskell2010
-
 library
   hs-source-dirs:       src
   exposed-modules:      HaskellWorks.Data.AtIndex
@@ -31,6 +23,7 @@
                       , HaskellWorks.Data.Container
                       , HaskellWorks.Data.Decode
                       , HaskellWorks.Data.Drop
+                      , HaskellWorks.Data.Empty
                       , HaskellWorks.Data.Filter
                       , HaskellWorks.Data.FromByteString
                       , HaskellWorks.Data.FromForeignRegion
@@ -65,7 +58,6 @@
                       , hspec
                       , hw-prim
                       , QuickCheck
-                      , random
                       , vector
   ghc-options:          -threaded -rtsopts -with-rtsopts=-N -Wall
   default-language:     Haskell2010
@@ -73,14 +65,3 @@
 source-repository head
   type:     git
   location: https://github.com/haskell-works/hw-prim
-
-benchmark bench
-    Type: exitcode-stdio-1.0
-    HS-Source-Dirs: bench
-    Main-Is: Main.hs
-    GHC-Options: -Wall -O2 -msse4.2
-    Default-Language: Haskell2010
-    Build-Depends:      base                          >= 4          && < 5
-                      , criterion
-                      , hw-prim
-                      , vector
diff --git a/src/HaskellWorks/Data/Empty.hs b/src/HaskellWorks/Data/Empty.hs
new file mode 100644
--- /dev/null
+++ b/src/HaskellWorks/Data/Empty.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE FlexibleContexts      #-}
+{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE TypeFamilies          #-}
+
+module HaskellWorks.Data.Empty
+    ( Empty(..)
+    ) where
+
+import qualified Data.ByteString               as BS
+import           Data.Int
+import qualified Data.Vector                   as DV
+import qualified Data.Vector.Storable          as DVS
+import           Data.Word
+import           HaskellWorks.Data.Container
+
+class Container a => Empty a where
+  empty :: a
+
+instance Empty [a] where
+  empty = []
+  {-# INLINE empty #-}
+
+instance Empty BS.ByteString where
+  empty = BS.empty
+  {-# INLINE empty #-}
+
+instance Empty (DV.Vector Word8) where
+  empty = DV.empty
+  {-# INLINE empty #-}
+
+instance Empty (DV.Vector Word16) where
+  empty = DV.empty
+  {-# INLINE empty #-}
+
+instance Empty (DV.Vector Word32) where
+  empty = DV.empty
+  {-# INLINE empty #-}
+
+instance Empty (DV.Vector Word64) where
+  empty = DV.empty
+  {-# INLINE empty #-}
+
+instance Empty (DVS.Vector Word8) where
+  empty = DVS.empty
+  {-# INLINE empty #-}
+
+instance Empty (DVS.Vector Word16) where
+  empty = DVS.empty
+  {-# INLINE empty #-}
+
+instance Empty (DVS.Vector Word32) where
+  empty = DVS.empty
+  {-# INLINE empty #-}
+
+instance Empty (DVS.Vector Word64) where
+  empty = DVS.empty
+  {-# INLINE empty #-}
+
+instance Empty (DV.Vector Int8) where
+  empty = DV.empty
+  {-# INLINE empty #-}
+
+instance Empty (DV.Vector Int16) where
+  empty = DV.empty
+  {-# INLINE empty #-}
+
+instance Empty (DV.Vector Int32) where
+  empty = DV.empty
+  {-# INLINE empty #-}
+
+instance Empty (DV.Vector Int64) where
+  empty = DV.empty
+  {-# INLINE empty #-}
+
+instance Empty (DVS.Vector Int8) where
+  empty = DVS.empty
+  {-# INLINE empty #-}
+
+instance Empty (DVS.Vector Int16) where
+  empty = DVS.empty
+  {-# INLINE empty #-}
+
+instance Empty (DVS.Vector Int32) where
+  empty = DVS.empty
+  {-# INLINE empty #-}
+
+instance Empty (DVS.Vector Int64) where
+  empty = DVS.empty
+  {-# INLINE empty #-}
+
+instance Empty (DVS.Vector Int) where
+  empty = DVS.empty
+  {-# INLINE empty #-}
