diff --git a/Data/BinaryList/Internal.hs b/Data/BinaryList/Internal.hs
--- a/Data/BinaryList/Internal.hs
+++ b/Data/BinaryList/Internal.hs
@@ -4,6 +4,8 @@
   ( BinList (..)
     ) where
 
+import Control.DeepSeq (NFData (..))
+
 -- | A binary list is a list containing a power of two elements.
 --   Note that a binary list is never empty.
 data BinList a =
@@ -14,3 +16,7 @@
         --   * Both l and r have 2^(n-1) elements.
       | ListNode {-# UNPACK #-} !Int (BinList a) (BinList a)
         deriving Eq
+
+instance NFData a => NFData (BinList a) where
+  rnf (ListEnd x) = rnf x
+  rnf (ListNode _ l r) = rnf l `seq` rnf r
diff --git a/Data/BinaryList/Serialize.hs b/Data/BinaryList/Serialize.hs
--- a/Data/BinaryList/Serialize.hs
+++ b/Data/BinaryList/Serialize.hs
@@ -32,6 +32,8 @@
 import Data.ByteString.Lazy (ByteString,empty)
 -- Backwards Applicative
 import Control.Applicative.Backwards
+-- DeepSeq
+import Control.DeepSeq (NFData (..))
 
 -- | Encode a binary list using the 'Binary' instance of
 --   its elements.
@@ -104,6 +106,11 @@
                  -- | A decoding error, with an error message and the remaining input.
                | DecodingError String ByteString
                  deriving Show
+
+instance NFData a => NFData (Decoded a) where
+  rnf (PartialResult xs d) = rnf xs `seq` rnf d
+  rnf (FinalResult xs b) = rnf xs `seq` rnf b
+  rnf (DecodingError str b) = rnf str `seq` rnf b
 
 -- | Get the final result of a decoding process, unless it returned an error, in which
 --   case this error is returned as a 'String'.
diff --git a/bench/Main.hs b/bench/Main.hs
--- a/bench/Main.hs
+++ b/bench/Main.hs
@@ -3,14 +3,10 @@
 import qualified Data.BinaryList as BL
 
 import Control.Applicative
-import Control.DeepSeq
 import qualified Data.Foldable as F
 
 -- criterion
 import Criterion.Main
-
-instance NFData a => NFData (BinList a) where
-  rnf xs = F.foldl1 seq xs `seq` ()
 
 list1024 :: [Int]
 list1024 = [1..1024] -- 2^10 = 1024
diff --git a/binary-list.cabal b/binary-list.cabal
--- a/binary-list.cabal
+++ b/binary-list.cabal
@@ -1,6 +1,6 @@
 name:                binary-list
-version:             0.3.5.0
-synopsis:            Lists of size length a power of two.
+version:             0.4.0.0
+synopsis:            Lists of length a power of two.
 description:         Implementation of lists whose number of elements is a
                      power of two. Binary lists have this property by definition,
                      so it is impossible to build a value with other kind of length.
@@ -28,9 +28,12 @@
 library
   exposed-modules:     Data.BinaryList, Data.BinaryList.Serialize
   other-modules:       Data.BinaryList.Internal
-  build-depends:       base == 4.*, bytestring, binary >= 0.6.4.0
+  build-depends:       base == 4.*
+               ,       bytestring >= 0.10.0.0
+               ,       binary >= 0.6.4.0
                ,       transformers >= 0.3.0.0
                ,       phantom-state >= 0.2
+               ,       deepseq
   default-language:    Haskell2010
   ghc-options:         -Wall -fno-warn-orphans
 
@@ -45,6 +48,5 @@
   main-is: Main.hs
   build-depends: base == 4.*
                , binary-list
-               , deepseq
                , criterion
   ghc-options: -O2
