diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,7 @@
+0.3.33
+
+* Add `these` instances.
+
 0.3.22
 
 * Add `Void` instances.
diff --git a/quickcheck-instances.cabal b/quickcheck-instances.cabal
--- a/quickcheck-instances.cabal
+++ b/quickcheck-instances.cabal
@@ -1,134 +1,144 @@
-Name:                quickcheck-instances
-Version:             0.3.22
+name:               quickcheck-instances
+version:            0.3.23
+synopsis:           Common quickcheck instances
+description:
+  QuickCheck instances.
+  .
+  The goal is to supply QuickCheck instances for
+  types provided by the Haskell Platform.
+  .
+  Since all of these instances are provided as
+  orphans, I recommend that you do not use this library
+  within another library module, so that you don't
+  impose these instances on down-stream consumers of
+  your code.
+  .
+  For information on writing a test-suite with Cabal
+  see <https://www.haskell.org/cabal/users-guide/developing-packages.html#test-suites>
 
-Synopsis:            Common quickcheck instances
-Description:         QuickCheck instances.
-                     .
-                     The goal is to supply QuickCheck instances for
-                     types provided by the Haskell Platform.
-                     .
-                     Since all of these instances are provided as
-                     orphans, I recommend that you do not use this library
-                     within another library module, so that you don't
-                     impose these instances on down-stream consumers of
-                     your code.
-                     .
-                     For information on writing a test-suite with Cabal
-                     see <https://www.haskell.org/cabal/users-guide/developing-packages.html#test-suites>
+license:            BSD3
+license-file:       LICENSE
+author:
+  Antoine Latter <aslatter@gmail.com>, Oleg Grenrus <oleg.grenrus@iki.fi>
 
-License:             BSD3
-License-file:        LICENSE
-Author:              Antoine Latter <aslatter@gmail.com>, Oleg Grenrus <oleg.grenrus@iki.fi>
-Maintainer:          Oleg Grenrus <oleg.grenrus@iki.fi>
-Homepage:            https://github.com/phadej/qc-instances
-Bug-reports:         https://github.com/phadej/qc-instances/issues
-Copyright:           Copyright 2012-2016 Antoine Latter, 2017-2019 Oleg Grenrus
-Category:            Testing
-Build-type:          Simple
-Extra-source-files:  CHANGES
-Cabal-version:       >=1.8
-Tested-With:
-  GHC==7.4.2,
-  GHC==7.6.3,
-  GHC==7.8.4,
-  GHC==7.10.3,
-  GHC==8.0.2,
-  GHC==8.2.2,
-  GHC==8.4.4,
-  GHC==8.6.5,
-  GHC==8.8.1
+maintainer:         Oleg Grenrus <oleg.grenrus@iki.fi>
+homepage:           https://github.com/phadej/qc-instances
+bug-reports:        https://github.com/phadej/qc-instances/issues
+copyright:          Copyright 2012-2016 Antoine Latter, 2017-2019 Oleg Grenrus
+category:           Testing
+build-type:         Simple
+extra-source-files: CHANGES
+cabal-version:      >=1.10
+tested-with:
+  GHC ==7.4.2
+   || ==7.6.3
+   || ==7.8.4
+   || ==7.10.3
+   || ==8.0.2
+   || ==8.2.2
+   || ==8.4.4
+   || ==8.6.5
+   || ==8.8.3
+   || ==8.10.1
 
-Source-repository head
+source-repository head
   type:     git
   location: https://github.com/phadej/qc-instances.git
 
-Flag bytestring-builder
+flag bytestring-builder
   description: Use bytestring-builder (with old bytestring)
-  default: False
-  manual: False
+  default:     False
+  manual:      False
 
-Library
-  Exposed-modules:     Test.QuickCheck.Instances
-                       Test.QuickCheck.Instances.Array
-                       Test.QuickCheck.Instances.ByteString
-                       Test.QuickCheck.Instances.CaseInsensitive
-                       Test.QuickCheck.Instances.Containers
-                       Test.QuickCheck.Instances.Hashable
-                       Test.QuickCheck.Instances.Natural
-                       Test.QuickCheck.Instances.OldTime
-                       Test.QuickCheck.Instances.Scientific
-                       Test.QuickCheck.Instances.Semigroup
-                       Test.QuickCheck.Instances.Tagged
-                       Test.QuickCheck.Instances.Text
-                       Test.QuickCheck.Instances.Time
-                       Test.QuickCheck.Instances.Transformer
-                       Test.QuickCheck.Instances.UUID
-                       Test.QuickCheck.Instances.UnorderedContainers
-                       Test.QuickCheck.Instances.Vector
-                       Test.QuickCheck.Instances.Void
-  Hs-Source-Dirs:      src
-  Build-depends:
-    base       >=4.5    && <4.13,
-    QuickCheck >=2.13.2 && <2.14,
-    splitmix   >=0.0.2  && <0.1,
+library
+  default-language: Haskell2010
+  exposed-modules:
+    Test.QuickCheck.Instances
+    Test.QuickCheck.Instances.Array
+    Test.QuickCheck.Instances.ByteString
+    Test.QuickCheck.Instances.CaseInsensitive
+    Test.QuickCheck.Instances.Containers
+    Test.QuickCheck.Instances.Hashable
+    Test.QuickCheck.Instances.Natural
+    Test.QuickCheck.Instances.OldTime
+    Test.QuickCheck.Instances.Scientific
+    Test.QuickCheck.Instances.Semigroup
+    Test.QuickCheck.Instances.Tagged
+    Test.QuickCheck.Instances.Text
+    Test.QuickCheck.Instances.These
+    Test.QuickCheck.Instances.Time
+    Test.QuickCheck.Instances.Transformer
+    Test.QuickCheck.Instances.UnorderedContainers
+    Test.QuickCheck.Instances.UUID
+    Test.QuickCheck.Instances.Vector
+    Test.QuickCheck.Instances.Void
 
-    array                >=0.4.0.0 && <0.6,
-    base-compat          >=0.9.3   && <0.11,
-    bytestring           >=0.9.2.1 && <0.11,
-    case-insensitive     >=1.2.0.4 && <1.3,
-    containers           >=0.4.2.1 && <0.7,
-    hashable             >=1.2.5.0 && <1.4,
-    old-time             >=1.1.0.0 && <1.2,
-    scientific           >=0.2.0.0 && <0.4,
-    tagged               >=0.8.5   && <0.9,
-    text                 >=1.0.0.0 && <1.3,
-    time-compat          >=1.9.2.2 && <1.10,
-    transformers         >=0.3.0.0 && <0.6,
-    transformers-compat  >=0.5     && <0.7,
-    unordered-containers >=0.2.2.0 && <0.3,
-    uuid-types           >=1.0.3   && <1.1,
-    vector               >=0.9     && <0.13
+  hs-source-dirs:   src
+  build-depends:
+      base        >=4.5    && <4.15
+    , QuickCheck  >=2.13.2 && <2.15
+    , splitmix    >=0.0.2  && <0.1
 
+  build-depends:
+      array                 >=0.4.0.0 && <0.6
+    , base-compat           >=0.10.5  && <0.12
+    , bytestring            >=0.9.2.1 && <0.11
+    , case-insensitive      >=1.2.0.4 && <1.3
+    , containers            >=0.4.2.1 && <0.7
+    , hashable              >=1.2.7.0 && <1.4
+    , old-time              >=1.1.0.0 && <1.2
+    , scientific            >=0.2.0.0 && <0.4
+    , tagged                >=0.8.5   && <0.9
+    , text                  >=1.0.0.0 && <1.3
+    , these                 >=1.1     && <1.2
+    , time-compat           >=1.9.2.2 && <1.10
+    , transformers          >=0.3.0.0 && <0.6
+    , transformers-compat   >=0.6.5   && <0.7
+    , unordered-containers  >=0.2.2.0 && <0.3
+    , uuid-types            >=1.0.3   && <1.1
+    , vector                >=0.9     && <0.13
+
   -- version is irrelevant.
-  Build-depends: time
+  build-depends:    time
 
-  if !impl(ghc >= 8.0)
-    build-depends:
-      semigroups >=0.18.5 && <0.20
+  if !impl(ghc >=8.0)
+    build-depends: semigroups >=0.18.5 && <0.20
 
-  if !impl(ghc >= 7.10)
+  if !impl(ghc >=7.10)
     build-depends:
-      nats >=1 && <1.2,
-      void >=0.7.2 && <0.8
+        nats  >=1     && <1.2
+      , void  >=0.7.2 && <0.8
 
   if flag(bytestring-builder)
     build-depends:
-      bytestring-builder   >=0.10.4  && <0.11,
-      bytestring <0.10.4.0
+        bytestring          >=0      && <0.10.4.0
+      , bytestring-builder  >=0.10.4 && <0.11
+
   else
-    build-depends:
-      bytestring >=0.10.4.0
+    build-depends: bytestring >=0.10.4.0
 
-  Ghc-options:         -Wall
+  ghc-options:      -Wall
 
 test-suite self-test
-  type: exitcode-stdio-1.0
-  main-is: Tests.hs
-  hs-source-dirs: test
+  default-language: Haskell2010
+  type:             exitcode-stdio-1.0
+  main-is:          Tests.hs
+  hs-source-dirs:   test
   build-depends:
-    base,
-    QuickCheck,
-    quickcheck-instances,
-    containers,
-    tagged,
-    uuid-types
+      base
+    , containers
+    , QuickCheck
+    , quickcheck-instances
+    , tagged
+    , uuid-types
 
 benchmark bytestring-gen
-  type: exitcode-stdio-1.0
-  main-is: ByteString.hs
-  hs-source-dirs: bench
+  default-language: Haskell2010
+  type:             exitcode-stdio-1.0
+  main-is:          ByteString.hs
+  hs-source-dirs:   bench
   build-depends:
-    base,
-    QuickCheck,
-    quickcheck-instances,
-    bytestring
+      base
+    , bytestring
+    , QuickCheck
+    , quickcheck-instances
diff --git a/src/Test/QuickCheck/Instances.hs b/src/Test/QuickCheck/Instances.hs
--- a/src/Test/QuickCheck/Instances.hs
+++ b/src/Test/QuickCheck/Instances.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP              #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 {-|
@@ -35,15 +35,16 @@
 import Test.QuickCheck.Instances.Containers ()
 import Test.QuickCheck.Instances.Hashable ()
 import Test.QuickCheck.Instances.Natural ()
-import Test.QuickCheck.Instances.OldTime ()
 import Test.QuickCheck.Instances.Natural ()
+import Test.QuickCheck.Instances.OldTime ()
 import Test.QuickCheck.Instances.Scientific ()
 import Test.QuickCheck.Instances.Semigroup ()
 import Test.QuickCheck.Instances.Tagged ()
 import Test.QuickCheck.Instances.Text ()
+import Test.QuickCheck.Instances.These ()
 import Test.QuickCheck.Instances.Time ()
 import Test.QuickCheck.Instances.Transformer ()
-import Test.QuickCheck.Instances.UUID ()
 import Test.QuickCheck.Instances.UnorderedContainers ()
+import Test.QuickCheck.Instances.UUID ()
 import Test.QuickCheck.Instances.Vector ()
 import Test.QuickCheck.Instances.Void ()
diff --git a/src/Test/QuickCheck/Instances/Array.hs b/src/Test/QuickCheck/Instances/Array.hs
--- a/src/Test/QuickCheck/Instances/Array.hs
+++ b/src/Test/QuickCheck/Instances/Array.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP              #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 module Test.QuickCheck.Instances.Array () where
@@ -7,11 +7,11 @@
 import Prelude.Compat
 
 import Control.Applicative (liftA2)
-import Data.Ix (Ix (..))
+import Data.Ix             (Ix (..))
 
 import Test.QuickCheck
 
-import qualified Data.Array.IArray as Array
+import qualified Data.Array.IArray  as Array
 import qualified Data.Array.Unboxed as Array
 
 -------------------------------------------------------------------------------
diff --git a/src/Test/QuickCheck/Instances/ByteString.hs b/src/Test/QuickCheck/Instances/ByteString.hs
--- a/src/Test/QuickCheck/Instances/ByteString.hs
+++ b/src/Test/QuickCheck/Instances/ByteString.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE BangPatterns     #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 module Test.QuickCheck.Instances.ByteString () where
@@ -6,15 +6,15 @@
 import Prelude ()
 import Prelude.Compat
 
-import Data.Word (Word8)
+import Data.Word              (Word8)
 import Test.QuickCheck
 import Test.QuickCheck.Gen
 import Test.QuickCheck.Random (QCGen (..))
 
 import qualified System.Random.SplitMix as SM
 
-import qualified Data.ByteString as BS
-import qualified Data.ByteString.Lazy as BL
+import qualified Data.ByteString       as BS
+import qualified Data.ByteString.Lazy  as LBS
 import qualified Data.ByteString.Short as SBS
 
 -------------------------------------------------------------------------------
@@ -44,14 +44,14 @@
     function = functionMap BS.unpack BS.pack
 
 
-instance Arbitrary BL.ByteString where
+instance Arbitrary LBS.ByteString where
     arbitrary = MkGen $ \(QCGen g0) size ->
         if size <= 0
-        then BL.empty
+        then LBS.empty
         else
             let (i, g1) = SM.nextInt g0
                 size' = i `mod` size
-            in BL.unfoldr gen (size', g1)
+            in LBS.unfoldr gen (size', g1)
       where
         gen :: (Int, SM.SMGen) -> Maybe (Word8, (Int, SM.SMGen))
         gen (!i, !g)
@@ -60,13 +60,13 @@
           where
             ~(w64, g') = SM.nextWord64 g
 
-    shrink xs = BL.pack <$> shrink (BL.unpack xs)
+    shrink xs = LBS.pack <$> shrink (LBS.unpack xs)
 
-instance CoArbitrary BL.ByteString where
-    coarbitrary = coarbitrary . BL.unpack
+instance CoArbitrary LBS.ByteString where
+    coarbitrary = coarbitrary . LBS.unpack
 
-instance Function BL.ByteString where
-    function = functionMap BL.unpack BL.pack
+instance Function LBS.ByteString where
+    function = functionMap LBS.unpack LBS.pack
 
 
 instance Arbitrary SBS.ShortByteString where
diff --git a/src/Test/QuickCheck/Instances/CaseInsensitive.hs b/src/Test/QuickCheck/Instances/CaseInsensitive.hs
--- a/src/Test/QuickCheck/Instances/CaseInsensitive.hs
+++ b/src/Test/QuickCheck/Instances/CaseInsensitive.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP              #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 module Test.QuickCheck.Instances.CaseInsensitive () where
diff --git a/src/Test/QuickCheck/Instances/Containers.hs b/src/Test/QuickCheck/Instances/Containers.hs
--- a/src/Test/QuickCheck/Instances/Containers.hs
+++ b/src/Test/QuickCheck/Instances/Containers.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP              #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 module Test.QuickCheck.Instances.Containers () where
@@ -34,7 +34,7 @@
                 rest <- arbPartition $ k - first
                 return $ first : rest
 
-    liftShrink shr = go 
+    liftShrink shr = go
       where
         go (Tree.Node val forest) = forest ++
             [ Tree.Node e fs
diff --git a/src/Test/QuickCheck/Instances/Hashable.hs b/src/Test/QuickCheck/Instances/Hashable.hs
--- a/src/Test/QuickCheck/Instances/Hashable.hs
+++ b/src/Test/QuickCheck/Instances/Hashable.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP              #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 module Test.QuickCheck.Instances.Hashable () where
diff --git a/src/Test/QuickCheck/Instances/OldTime.hs b/src/Test/QuickCheck/Instances/OldTime.hs
--- a/src/Test/QuickCheck/Instances/OldTime.hs
+++ b/src/Test/QuickCheck/Instances/OldTime.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP              #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 module Test.QuickCheck.Instances.OldTime () where
diff --git a/src/Test/QuickCheck/Instances/Scientific.hs b/src/Test/QuickCheck/Instances/Scientific.hs
--- a/src/Test/QuickCheck/Instances/Scientific.hs
+++ b/src/Test/QuickCheck/Instances/Scientific.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP              #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 module Test.QuickCheck.Instances.Scientific () where
diff --git a/src/Test/QuickCheck/Instances/Semigroup.hs b/src/Test/QuickCheck/Instances/Semigroup.hs
--- a/src/Test/QuickCheck/Instances/Semigroup.hs
+++ b/src/Test/QuickCheck/Instances/Semigroup.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP              #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 module Test.QuickCheck.Instances.Semigroup () where
@@ -7,8 +7,8 @@
 import Prelude.Compat
 
 import Control.Applicative (liftA2)
-import Data.List.NonEmpty (NonEmpty (..), nonEmpty)
-import Data.Maybe (mapMaybe)
+import Data.List.NonEmpty  (NonEmpty (..), nonEmpty)
+import Data.Maybe          (mapMaybe)
 
 import Test.QuickCheck
 
diff --git a/src/Test/QuickCheck/Instances/Tagged.hs b/src/Test/QuickCheck/Instances/Tagged.hs
--- a/src/Test/QuickCheck/Instances/Tagged.hs
+++ b/src/Test/QuickCheck/Instances/Tagged.hs
@@ -1,7 +1,7 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP              #-}
 {-# LANGUAGE FlexibleContexts #-}
 #if __GLASGOW_HASKELL__ >= 706
-{-# LANGUAGE PolyKinds #-}
+{-# LANGUAGE PolyKinds        #-}
 #endif
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 module Test.QuickCheck.Instances.Tagged () where
diff --git a/src/Test/QuickCheck/Instances/Text.hs b/src/Test/QuickCheck/Instances/Text.hs
--- a/src/Test/QuickCheck/Instances/Text.hs
+++ b/src/Test/QuickCheck/Instances/Text.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP              #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 module Test.QuickCheck.Instances.Text () where
@@ -8,29 +8,29 @@
 
 import Test.QuickCheck
 
-import qualified Data.Text as TS
-import qualified Data.Text.Lazy as TL
+import qualified Data.Text      as T
+import qualified Data.Text.Lazy as LT
 
 -------------------------------------------------------------------------------
 -- text
 -------------------------------------------------------------------------------
 
-instance Arbitrary TS.Text where
-    arbitrary = TS.pack <$> arbitrary
-    shrink xs = TS.pack <$> shrink (TS.unpack xs)
+instance Arbitrary T.Text where
+    arbitrary = T.pack <$> arbitrary
+    shrink xs = T.pack <$> shrink (T.unpack xs)
 
-instance Arbitrary TL.Text where
-    arbitrary = TL.pack <$> arbitrary
-    shrink xs = TL.pack <$> shrink (TL.unpack xs)
+instance Arbitrary LT.Text where
+    arbitrary = LT.pack <$> arbitrary
+    shrink xs = LT.pack <$> shrink (LT.unpack xs)
 
-instance CoArbitrary TS.Text where
-    coarbitrary = coarbitrary . TS.unpack
+instance CoArbitrary T.Text where
+    coarbitrary = coarbitrary . T.unpack
 
-instance CoArbitrary TL.Text where
-    coarbitrary = coarbitrary . TL.unpack
+instance CoArbitrary LT.Text where
+    coarbitrary = coarbitrary . LT.unpack
 
-instance Function TS.Text where
-    function = functionMap TS.unpack TS.pack
+instance Function T.Text where
+    function = functionMap T.unpack T.pack
 
-instance Function TL.Text where
-    function = functionMap TL.unpack TL.pack
+instance Function LT.Text where
+    function = functionMap LT.unpack LT.pack
diff --git a/src/Test/QuickCheck/Instances/These.hs b/src/Test/QuickCheck/Instances/These.hs
new file mode 100644
--- /dev/null
+++ b/src/Test/QuickCheck/Instances/These.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE CPP              #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+module Test.QuickCheck.Instances.These () where
+
+import Prelude ()
+import Prelude.Compat
+
+import Test.QuickCheck
+
+import Data.Functor.These (These1 (..))
+import Data.These         (These (..))
+
+-------------------------------------------------------------------------------
+-- These
+-------------------------------------------------------------------------------
+
+-- | @since 0.7.4
+instance Arbitrary2 These where
+    liftArbitrary2 arbA arbB = oneof
+        [ This <$> arbA
+        , That <$> arbB
+        , These <$> arbA <*> arbB
+        ]
+
+    liftShrink2  shrA _shrB (This x) = This <$> shrA x
+    liftShrink2 _shrA  shrB (That y) = That <$> shrB y
+    liftShrink2  shrA  shrB (These x y) =
+        [This x, That y] ++ [These x' y' | (x', y') <- liftShrink2 shrA shrB (x, y)]
+
+-- | @since 0.7.4
+instance (Arbitrary a) => Arbitrary1 (These a) where
+    liftArbitrary = liftArbitrary2 arbitrary
+    liftShrink = liftShrink2 shrink
+
+-- | @since 0.7.1
+instance (Arbitrary a, Arbitrary b) => Arbitrary (These a b) where
+    arbitrary = arbitrary1
+    shrink = shrink1
+
+-- | @since 0.7.1
+instance (Function a, Function b) => Function (These a b) where
+  function = functionMap g f
+    where
+      g (This a)    = Left a
+      g (That b)    = Right (Left b)
+      g (These a b) = Right (Right (a, b))
+
+      f (Left a)               = This a
+      f (Right (Left b))       = That b
+      f (Right (Right (a, b))) = These a b
+
+-- | @since 0.7.1
+instance (CoArbitrary a, CoArbitrary b) => CoArbitrary (These a b)
+
+-------------------------------------------------------------------------------
+-- These1
+-------------------------------------------------------------------------------
+
+instance (Arbitrary1 f, Arbitrary1 g) => Arbitrary1 (These1 f g) where
+    liftArbitrary arb = oneof
+        [ This1 <$> liftArbitrary arb
+        , That1 <$> liftArbitrary arb
+        , These1 <$> liftArbitrary arb <*> liftArbitrary arb
+        ]
+
+    liftShrink shr (This1 x) = This1 <$> liftShrink shr x
+    liftShrink shr (That1 y) = That1 <$> liftShrink shr y
+    liftShrink shr (These1 x y) =
+        [ This1 x, That1 y ] ++
+        [ These1 x' y'
+        | (x', y') <- liftShrink2 (liftShrink shr) (liftShrink shr) (x, y)
+        ]
+
+instance (Arbitrary1 f, Arbitrary1 g, Arbitrary a) => Arbitrary (These1 f g a) where
+    arbitrary = arbitrary1
+    shrink    = shrink1
diff --git a/src/Test/QuickCheck/Instances/Transformer.hs b/src/Test/QuickCheck/Instances/Transformer.hs
--- a/src/Test/QuickCheck/Instances/Transformer.hs
+++ b/src/Test/QuickCheck/Instances/Transformer.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP              #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 module Test.QuickCheck.Instances.Transformer () where
@@ -6,8 +6,8 @@
 import Prelude ()
 import Prelude.Compat
 
-import Control.Monad.Trans.Maybe (MaybeT(..))
-import Data.Functor.Sum (Sum (..))
+import Control.Monad.Trans.Maybe (MaybeT (..))
+import Data.Functor.Sum          (Sum (..))
 
 import Test.QuickCheck
 
diff --git a/src/Test/QuickCheck/Instances/UUID.hs b/src/Test/QuickCheck/Instances/UUID.hs
--- a/src/Test/QuickCheck/Instances/UUID.hs
+++ b/src/Test/QuickCheck/Instances/UUID.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP              #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 module Test.QuickCheck.Instances.UUID () where
diff --git a/src/Test/QuickCheck/Instances/UnorderedContainers.hs b/src/Test/QuickCheck/Instances/UnorderedContainers.hs
--- a/src/Test/QuickCheck/Instances/UnorderedContainers.hs
+++ b/src/Test/QuickCheck/Instances/UnorderedContainers.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP              #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 module Test.QuickCheck.Instances.UnorderedContainers () where
@@ -11,7 +11,7 @@
 import Test.QuickCheck
 
 import qualified Data.HashMap.Lazy as HML
-import qualified Data.HashSet as HS
+import qualified Data.HashSet      as HS
 
 -------------------------------------------------------------------------------
 -- unordered-containers
diff --git a/src/Test/QuickCheck/Instances/Vector.hs b/src/Test/QuickCheck/Instances/Vector.hs
--- a/src/Test/QuickCheck/Instances/Vector.hs
+++ b/src/Test/QuickCheck/Instances/Vector.hs
@@ -1,6 +1,6 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP              #-}
 {-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE TypeOperators    #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 module Test.QuickCheck.Instances.Vector () where
 
@@ -10,10 +10,10 @@
 import Test.QuickCheck
 import Test.QuickCheck.Function ((:->))
 
-import qualified Data.Vector as Vector
-import qualified Data.Vector.Generic as GVector
+import qualified Data.Vector          as Vector
+import qualified Data.Vector.Generic  as GVector
 import qualified Data.Vector.Storable as SVector
-import qualified Data.Vector.Unboxed as UVector
+import qualified Data.Vector.Unboxed  as UVector
 
 -------------------------------------------------------------------------------
 -- vector
