diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,6 @@
+0.8.0.0
+* Remove dependency on data-default-class
+
 0.7.7.0
 * Add `natTransformRetryPolicy`
 
diff --git a/retry.cabal b/retry.cabal
--- a/retry.cabal
+++ b/retry.cabal
@@ -14,7 +14,7 @@
         case we should hang back for a bit and retry the query instead
         of simply raising an exception.
 
-version:             0.7.7.0
+version:             0.8.0.0
 synopsis:            Retry combinators for monadic actions that may fail
 license:             BSD3
 license-file:        LICENSE
@@ -37,7 +37,6 @@
   exposed-modules:     Control.Retry
   build-depends:
       base                 >= 4.6 && < 5
-    , data-default-class
     , exceptions           >= 0.5 && < 0.11
     , ghc-prim             < 0.6
     , random               >= 1 && < 1.2
@@ -62,7 +61,6 @@
         base              ==4.*
       , exceptions
       , transformers
-      , data-default-class
       , random
       , time
       , HUnit              >= 1.2.5.2
diff --git a/src/Control/Retry.hs b/src/Control/Retry.hs
--- a/src/Control/Retry.hs
+++ b/src/Control/Retry.hs
@@ -35,6 +35,7 @@
       RetryPolicyM (..)
     , RetryPolicy
     , retryPolicy
+    , retryPolicyDefault
     , natTransformRetryPolicy
     , RetryStatus (..)
     , defaultRetryStatus
@@ -87,7 +88,6 @@
 import           Control.Monad.Trans.Class
 import           Control.Monad.Trans.Maybe
 import           Control.Monad.Trans.State
-import           Data.Default.Class
 import           Data.List (foldl')
 import           Data.Maybe
 import           GHC.Generics
@@ -148,9 +148,9 @@
 -- type signatures pre-0.7.
 type RetryPolicy = forall m . Monad m => RetryPolicyM m
 
-
-instance Monad m => Default (RetryPolicyM m) where
-    def = constantDelay 50000 <> limitRetries 5
+-- | Default retry policy
+retryPolicyDefault :: RetryPolicy
+retryPolicyDefault = constantDelay 50000 <> limitRetries 5
 
 
 -- Base 4.9.0 adds a Data.Semigroup module. This has fewer
@@ -427,13 +427,13 @@
     go s = do
         res <- f s
         chk' <- chk s res
-        case chk' of
-          True -> do
+        if chk'
+          then do
             rs <- applyAndDelay policy s
             case rs of
               Nothing -> return res
               Just rs' -> go $! rs'
-          False -> return res
+          else return res
 
 
 -------------------------------------------------------------------------------
diff --git a/test/Tests/Control/Retry.hs b/test/Tests/Control/Retry.hs
--- a/test/Tests/Control/Retry.hs
+++ b/test/Tests/Control/Retry.hs
@@ -15,7 +15,6 @@
 import           Control.Monad.Identity
 import           Control.Monad.IO.Class
 import           Control.Monad.Writer.Strict
-import           Data.Default.Class          (def)
 import           Data.Either
 import           Data.IORef
 import           Data.List
@@ -227,7 +226,7 @@
 maskingStateTests = testGroup "masking state"
   [ testCase "shouldn't change masking state in a recovered action" $ do
       maskingState <- getMaskingState
-      final <- try $ recovering def testHandlers $ const $ do
+      final <- try $ recovering retryPolicyDefault testHandlers $ const $ do
         maskingState' <- getMaskingState
         maskingState' @?= maskingState
         fail "Retrying..."
@@ -242,7 +241,7 @@
                 maskingState @?= MaskedInterruptible
                 return shouldRetry
             ]
-      final <- try $ recovering def checkMaskingStateHandlers $ const $ fail "Retrying..."
+      final <- try $ recovering retryPolicyDefault checkMaskingStateHandlers $ const $ fail "Retrying..."
       assertBool
         ("Expected IOException but didn't get one")
         (isLeft (final :: Either IOException ()))
