diff --git a/src/Data/StateCodes/ISO31662US.hs b/src/Data/StateCodes/ISO31662US.hs
--- a/src/Data/StateCodes/ISO31662US.hs
+++ b/src/Data/StateCodes/ISO31662US.hs
@@ -1,11 +1,11 @@
 -- The information used in this module was pulled from the @Wikipedia article
 -- about ISO_3166-2:US@: <https://en.wikipedia.org/wiki/ISO_3166-2:US>.
 
+{-# LANGUAGE CPP                   #-}
 {-# LANGUAGE DeriveDataTypeable    #-}
 {-# LANGUAGE FlexibleInstances     #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE OverloadedStrings     #-}
--- Only if version 7.8
 {-# LANGUAGE PatternGuards         #-}
 
 module Data.StateCodes.ISO31662US
@@ -21,13 +21,16 @@
   , toText
   ) where
 
-import           Control.Applicative   (pure)
 import           Control.Arrow         ((&&&))
 import           Data.Aeson
 import           Data.Text             (Text)
 import qualified Data.Text             as T
 import           Data.Typeable
 import           Text.Shakespeare.I18N
+
+#if !MIN_VERSION_base(4,8,0)
+import           Control.Applicative   (pure)
+#endif
 
 data StateCode = AL     -- ^ Alabama
                | AK     -- ^ Alaska
diff --git a/state-codes.cabal b/state-codes.cabal
--- a/state-codes.cabal
+++ b/state-codes.cabal
@@ -1,5 +1,5 @@
 name:                state-codes
-version:             0.1.2
+version:             0.1.3
 synopsis:            ISO 3166-2:US state codes and i18n names
 description:         This package provides the ISO 3166-2:US state codes and i18n names
 homepage:            https://github.com/acamino/state-codes#README
diff --git a/test/Data/StateCodesSpec.hs b/test/Data/StateCodesSpec.hs
--- a/test/Data/StateCodesSpec.hs
+++ b/test/Data/StateCodesSpec.hs
@@ -1,27 +1,20 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# OPTIONS -fno-warn-orphans  #-}
-
 module Data.StateCodesSpec where
 
 import           Data.Aeson
-import qualified Data.Aeson            as A
 import           Test.Hspec
 import           Test.Hspec.QuickCheck
 import           Test.QuickCheck
 
 import           Data.StateCodes
 
-instance Arbitrary StateCode where
-  arbitrary = elements [minBound ..]
-
-
 spec :: Spec
-spec = do
-  prop "fromName . toName" $ forAll arbitrary $ \code ->
-    (fromName . toName) code == code
+spec =
+  describe "StateCode" $ do
+    prop "fromName . toName" $ forAll arbitraryBoundedEnum $ \code ->
+      (fromName . toName) code == (code :: StateCode)
 
-  prop "fromText . toText" $ forAll arbitrary $ \code ->
-    (fromText . toText) code == code
+    prop "fromText . toText" $ forAll arbitraryBoundedEnum $ \code ->
+      (fromText . toText) code == (code :: StateCode)
 
-  prop "fromJSON . toJSON" $ forAll (arbitrary :: Gen StateCode)$ \code ->
-    (fromJSON . toJSON) code == A.Success code
+    prop "decode . encode" $ forAll arbitraryBoundedEnum $ \code ->
+      (decode . encode) code == Just (code :: StateCode)
