diff --git a/msgpack-types.cabal b/msgpack-types.cabal
--- a/msgpack-types.cabal
+++ b/msgpack-types.cabal
@@ -1,5 +1,5 @@
 name:                 msgpack-types
-version:              0.0.4
+version:              0.1.0
 synopsis:             A Haskell implementation of MessagePack.
 homepage:             http://msgpack.org/
 license:              BSD3
@@ -35,7 +35,6 @@
       Data.MessagePack.Types.Assoc
       Data.MessagePack.Types.Class
       Data.MessagePack.Types.Generic
-      Data.MessagePack.Types.Instances
       Data.MessagePack.Types.Object
   build-depends:
       base < 5
@@ -59,6 +58,8 @@
   ghc-options:
       -Wall
       -fno-warn-unused-imports
+  build-tool-depends:
+      hspec-discover:hspec-discover
   build-depends:
       base < 5
     , QuickCheck
diff --git a/src/Data/MessagePack/Types.hs b/src/Data/MessagePack/Types.hs
--- a/src/Data/MessagePack/Types.hs
+++ b/src/Data/MessagePack/Types.hs
@@ -5,7 +5,7 @@
     , MessagePack (..)
     ) where
 
-import           Data.MessagePack.Types.Assoc     (Assoc (..))
-import           Data.MessagePack.Types.Class     (MessagePack (..))
-import           Data.MessagePack.Types.Instances ()
-import           Data.MessagePack.Types.Object    (Object (..))
+import           Data.MessagePack.Types.Assoc   (Assoc (..))
+import           Data.MessagePack.Types.Class   (MessagePack (..))
+import           Data.MessagePack.Types.Generic ()
+import           Data.MessagePack.Types.Object  (Object (..))
diff --git a/src/Data/MessagePack/Types/Assoc.hs b/src/Data/MessagePack/Types/Assoc.hs
--- a/src/Data/MessagePack/Types/Assoc.hs
+++ b/src/Data/MessagePack/Types/Assoc.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE DeriveDataTypeable         #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE StrictData                 #-}
 {-# LANGUAGE Trustworthy                #-}
 
 --------------------------------------------------------------------
diff --git a/src/Data/MessagePack/Types/Class.hs b/src/Data/MessagePack/Types/Class.hs
--- a/src/Data/MessagePack/Types/Class.hs
+++ b/src/Data/MessagePack/Types/Class.hs
@@ -4,6 +4,7 @@
 {-# LANGUAGE FlexibleInstances   #-}
 {-# LANGUAGE IncoherentInstances #-}
 {-# LANGUAGE LambdaCase          #-}
+{-# LANGUAGE StrictData          #-}
 {-# LANGUAGE Trustworthy         #-}
 
 --------------------------------------------------------------------
@@ -29,8 +30,8 @@
 import           Control.Arrow                 ((***))
 import qualified Data.ByteString               as S
 import qualified Data.ByteString.Lazy          as L
-import           Data.Hashable                 (Hashable)
 import qualified Data.HashMap.Strict           as HashMap
+import           Data.Hashable                 (Hashable)
 import           Data.Int                      (Int16, Int32, Int64, Int8)
 import qualified Data.IntMap.Strict            as IntMap
 import qualified Data.Map                      as Map
@@ -264,7 +265,7 @@
 instance (MessagePack a1, MessagePack a2) => MessagePack (a1, a2) where
     toObject (a1, a2) = ObjectArray [toObject a1, toObject a2]
     fromObject (ObjectArray [a1, a2]) = (,) <$> fromObject a1 <*> fromObject a2
-    fromObject _ = fail "invalid encoding for tuple"
+    fromObject _                      = fail "invalid encoding for tuple"
 
 instance (MessagePack a1, MessagePack a2, MessagePack a3) => MessagePack (a1, a2, a3) where
     toObject (a1, a2, a3) = ObjectArray [toObject a1, toObject a2, toObject a3]
diff --git a/src/Data/MessagePack/Types/Generic.hs b/src/Data/MessagePack/Types/Generic.hs
--- a/src/Data/MessagePack/Types/Generic.hs
+++ b/src/Data/MessagePack/Types/Generic.hs
@@ -7,6 +7,7 @@
 {-# LANGUAGE LambdaCase          #-}
 {-# LANGUAGE Safe                #-}
 {-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE StrictData          #-}
 {-# LANGUAGE TypeOperators       #-}
 module Data.MessagePack.Types.Generic () where
 
diff --git a/src/Data/MessagePack/Types/Instances.hs b/src/Data/MessagePack/Types/Instances.hs
deleted file mode 100644
--- a/src/Data/MessagePack/Types/Instances.hs
+++ /dev/null
@@ -1,12 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-module Data.MessagePack.Types.Instances () where
-
-import           Data.Void                      (Void)
-
-import           Data.MessagePack.Types.Class   (MessagePack)
-import           Data.MessagePack.Types.Generic ()
-
-
-instance MessagePack a => MessagePack (Maybe a)
-instance (MessagePack a, MessagePack b) => MessagePack (Either a b)
-instance MessagePack Void
diff --git a/src/Data/MessagePack/Types/Object.hs b/src/Data/MessagePack/Types/Object.hs
--- a/src/Data/MessagePack/Types/Object.hs
+++ b/src/Data/MessagePack/Types/Object.hs
@@ -2,6 +2,7 @@
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE DeriveGeneric      #-}
 {-# LANGUAGE Safe               #-}
+{-# LANGUAGE StrictData         #-}
 module Data.MessagePack.Types.Object
     ( Object (..)
     ) where
@@ -22,25 +23,25 @@
 data Object
     = ObjectNil
       -- ^ represents nil
-    | ObjectBool                  !Bool
+    | ObjectBool                  Bool
       -- ^ represents true or false
-    | ObjectInt    {-# UNPACK #-} !Int64
+    | ObjectInt    {-# UNPACK #-} Int64
       -- ^ represents a negative integer
-    | ObjectWord   {-# UNPACK #-} !Word64
+    | ObjectWord   {-# UNPACK #-} Word64
       -- ^ represents a positive integer
-    | ObjectFloat  {-# UNPACK #-} !Float
+    | ObjectFloat  {-# UNPACK #-} Float
       -- ^ represents a floating point number
-    | ObjectDouble {-# UNPACK #-} !Double
+    | ObjectDouble {-# UNPACK #-} Double
       -- ^ represents a floating point number
-    | ObjectStr                   !T.Text
+    | ObjectStr                   T.Text
       -- ^ extending Raw type represents a UTF-8 string
-    | ObjectBin                   !S.ByteString
+    | ObjectBin                   S.ByteString
       -- ^ extending Raw type represents a byte array
-    | ObjectArray                 ![Object]
+    | ObjectArray                 [Object]
       -- ^ represents a sequence of objects
-    | ObjectMap                   ![(Object, Object)]
+    | ObjectMap                   [(Object, Object)]
       -- ^ represents key-value pairs of objects
-    | ObjectExt    {-# UNPACK #-} !Word8 !S.ByteString
+    | ObjectExt    {-# UNPACK #-} Word8 S.ByteString
       -- ^ represents a tuple of an integer and a byte array where
       -- the integer represents type information and the byte array represents data.
     deriving (Read, Show, Eq, Ord, Typeable, Generic)
diff --git a/test/Data/MessagePack/Types/ClassSpec.hs b/test/Data/MessagePack/Types/ClassSpec.hs
--- a/test/Data/MessagePack/Types/ClassSpec.hs
+++ b/test/Data/MessagePack/Types/ClassSpec.hs
@@ -3,6 +3,7 @@
 {-# LANGUAGE LambdaCase          #-}
 {-# LANGUAGE OverloadedStrings   #-}
 {-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE StrictData          #-}
 {-# LANGUAGE Trustworthy         #-}
 module Data.MessagePack.Types.ClassSpec where
 
@@ -11,8 +12,8 @@
 import           Control.Monad                     (mplus, mzero)
 import qualified Data.ByteString                   as BS
 import qualified Data.ByteString.Lazy              as LBS
-import           Data.Hashable                     (Hashable)
 import qualified Data.HashMap.Strict               as HashMap
+import           Data.Hashable                     (Hashable)
 import           Data.Int                          (Int16, Int32, Int64, Int8)
 import qualified Data.IntMap.Strict                as IntMap
 import qualified Data.Map                          as Map
@@ -98,11 +99,13 @@
 spec :: Spec
 spec = do
     describe "GMessagePack" $ do
-        it "is a reversible operation" $ property $ \(x :: MyType) ->
-            fromObject (toObject x) `shouldBe` Just x
+        it "is a reversible operation"
+            $ withMaxSuccess 10000
+            $ property
+            $ \(x :: MyType) -> fromObject (toObject x) `shouldBe` Just x
 
         it "handles arbitrary values"
-            $ withMaxSuccess 100000
+            $ withMaxSuccess 10000
             $ property
             $ \ob -> fromObject ob `shouldSatisfy` \case
                   Just EnumTyCon -> True
