diff --git a/hedgehog-extras.cabal b/hedgehog-extras.cabal
--- a/hedgehog-extras.cabal
+++ b/hedgehog-extras.cabal
@@ -1,7 +1,7 @@
 cabal-version: 2.4
 
 name:                   hedgehog-extras
-version:                0.3.0.1
+version:                0.3.0.2
 synopsis:               Supplemental library for hedgehog
 description:            Supplemental library for hedgehog.
 category:               Test
diff --git a/src/Hedgehog/Extras/Internal/Test/Integration.hs b/src/Hedgehog/Extras/Internal/Test/Integration.hs
--- a/src/Hedgehog/Extras/Internal/Test/Integration.hs
+++ b/src/Hedgehog/Extras/Internal/Test/Integration.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE DeriveGeneric #-}
 
 module Hedgehog.Extras.Internal.Test.Integration
   ( Integration
@@ -7,9 +8,11 @@
   , runIntegrationReaderT
   ) where
 
-import           Control.Monad.Reader
+import           Control.Monad.IO.Class (MonadIO(..))
+import           Control.Monad.Reader (ReaderT(runReaderT) )
 import           Control.Monad.Trans.Resource (ResourceT)
-import           Data.Functor
+import           Data.Functor ( (<$>) )
+import           GHC.Generics (Generic)
 import           System.IO (IO)
 
 import qualified Control.Concurrent.STM as STM
@@ -17,7 +20,7 @@
 
 newtype IntegrationState = IntegrationState
   { integrationStateFinals :: STM.TVar [Integration ()]
-  }
+  } deriving (Generic)
 
 type Integration a = H.PropertyT (ReaderT IntegrationState (ResourceT IO)) a
 
diff --git a/src/Hedgehog/Extras/Stock/IO/Network/Sprocket.hs b/src/Hedgehog/Extras/Stock/IO/Network/Sprocket.hs
--- a/src/Hedgehog/Extras/Stock/IO/Network/Sprocket.hs
+++ b/src/Hedgehog/Extras/Stock/IO/Network/Sprocket.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE DeriveGeneric #-}
+
 module Hedgehog.Extras.Stock.IO.Network.Sprocket
   ( Sprocket(..)
   , doesSprocketExist
@@ -6,16 +8,17 @@
   , maxSprocketArgumentNameLength
   ) where
 
-import           Data.Bool
-import           Data.Char
-import           Data.Eq
-import           Data.Functor
-import           Data.Int
-import           Data.Semigroup
+import           Data.Bool (Bool)
+import           Data.Char (Char)
+import           Data.Eq (Eq((==)))
+import           Data.Functor (Functor(fmap))
+import           Data.Int (Int)
+import           Data.Semigroup (Semigroup((<>)))
 import           Data.String (String)
-import           Hedgehog.Extras.Stock.OS
+import           Hedgehog.Extras.Stock.OS (isWin32)
 import           System.IO (FilePath, IO)
-import           Text.Show
+import           Text.Show (Show)
+import           GHC.Generics (Generic)
 
 import qualified Hedgehog.Extras.Stock.IO.Network.NamedPipe as IO
 import qualified Hedgehog.Extras.Stock.IO.Network.Socket as IO
@@ -24,7 +27,7 @@
 data Sprocket = Sprocket
   { sprocketBase :: String
   , sprocketName :: String
-  } deriving (Eq, Show)
+  } deriving (Generic, Eq, Show)
 
 -- | Test if the sprocket exists
 doesSprocketExist :: Sprocket -> IO Bool
diff --git a/src/Hedgehog/Extras/Stock/IO/Process.hs b/src/Hedgehog/Extras/Stock/IO/Process.hs
--- a/src/Hedgehog/Extras/Stock/IO/Process.hs
+++ b/src/Hedgehog/Extras/Stock/IO/Process.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE DeriveGeneric       #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 
 module Hedgehog.Extras.Stock.IO.Process
@@ -14,6 +15,7 @@
 import           Data.Function
 import           Data.Int
 import           Data.Maybe
+import           GHC.Generics (Generic)
 import           GHC.Num
 import           System.Exit
 import           System.IO
@@ -24,7 +26,7 @@
 import qualified Control.Concurrent.Async as IO
 import qualified System.Process as IO
 
-data TimedOut = TimedOut deriving (Eq, Show)
+data TimedOut = TimedOut deriving (Generic, Eq, Show)
 
 maybeWaitForProcess
   :: ProcessHandle
diff --git a/src/Hedgehog/Extras/Test/Process.hs b/src/Hedgehog/Extras/Test/Process.hs
--- a/src/Hedgehog/Extras/Test/Process.hs
+++ b/src/Hedgehog/Extras/Test/Process.hs
@@ -1,6 +1,7 @@
-{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE DeriveGeneric       #-}
+{-# LANGUAGE OverloadedStrings   #-}
 {-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeApplications #-}
+{-# LANGUAGE TypeApplications    #-}
 
 module Hedgehog.Extras.Test.Process
   ( createProcess
@@ -35,6 +36,7 @@
 import           Data.Maybe (Maybe (..))
 import           Data.Monoid (Last (..), mempty, (<>))
 import           Data.String (String)
+import           GHC.Generics (Generic)
 import           GHC.Stack (HasCallStack)
 import           Hedgehog (MonadTest)
 import           Hedgehog.Extras.Internal.Cli (argQuote)
@@ -66,7 +68,7 @@
 data ExecConfig = ExecConfig
   { execConfigEnv :: Last [(String, String)]
   , execConfigCwd :: Last FilePath
-  } deriving (Eq, Show)
+  } deriving (Eq, Generic, Show)
 
 defaultExecConfig :: ExecConfig
 defaultExecConfig = ExecConfig
