diff --git a/genvalidity-hspec.cabal b/genvalidity-hspec.cabal
--- a/genvalidity-hspec.cabal
+++ b/genvalidity-hspec.cabal
@@ -1,5 +1,5 @@
 name:                genvalidity-hspec
-version:             0.2.0.0
+version:             0.2.0.1
 synopsis:            Standard spec's for GenValidity instances
 description:         Please see README.md
 homepage:            https://github.com/NorfairKing/validity#readme
@@ -17,7 +17,7 @@
   hs-source-dirs:      src
   exposed-modules:     Test.Validity
   build-depends:       base                               < 5
-                     , validity                 >= 0.2 && < 0.3
+                     , validity                 >= 0.3 && < 0.4
                      , genvalidity
                      , QuickCheck
                      , hspec                    >= 2.2 && < 2.3
diff --git a/src/Test/Validity.hs b/src/Test/Validity.hs
--- a/src/Test/Validity.hs
+++ b/src/Test/Validity.hs
@@ -40,6 +40,12 @@
     , failsOnInvalidInput
     , validIfSucceedsOnGen
     , validIfSucceeds
+    , succeedsOnGens2
+    , succeedsOnValidInput2
+    , failsOnGens2
+    , failsOnInvalidInput2
+    , validIfSucceedsOnGens2
+    , validIfSucceeds2
     ) where
 
 import           Data.Proxy
@@ -381,11 +387,73 @@
 -- | The function produces output that satisfies @isValid@ if it is given input
 -- that is generated by @genUnchecked@.
 validIfSucceeds
-  :: (Show a, Show b, Show (f b), GenValidity a, Validity b, CanFail f)
-  => (a -> f b)
-  -> Property
+    :: (Show a, Show b, Show (f b), GenValidity a, Validity b, CanFail f)
+    => (a -> f b)
+    -> Property
 validIfSucceeds = (`validIfSucceedsOnGen` genUnchecked)
 
+succeedsOnGens2
+    :: (Show a, Show b, Show c, Show (f c),
+        CanFail f)
+    => (a -> b -> f c)
+    -> Gen a -> Gen b
+    -> Property
+succeedsOnGens2 func genA genB =
+    forAll genA $ \a ->
+        forAll genB $ \b ->
+            func a b `shouldNotSatisfy` hasFailed
+
+succeedsOnValidInput2
+    :: (Show a, Show b, Show c, Show (f c),
+        GenValidity a, GenValidity b,
+        CanFail f)
+    => (a -> b -> f c)
+    -> Property
+succeedsOnValidInput2 func
+    = succeedsOnGens2 func genValid genValid
+
+failsOnGens2
+    :: (Show a, Show b, Show c, Show (f c),
+        CanFail f)
+    => (a -> b -> f c)
+    -> Gen a -> Gen b
+    -> Property
+failsOnGens2 func genA genB =
+    forAll genA $ \a ->
+        forAll genB $ \b ->
+            func a b `shouldSatisfy` hasFailed
+
+failsOnInvalidInput2
+    :: (Show a, Show b, Show c, Show (f c),
+        GenValidity a, GenValidity b,
+        CanFail f)
+    => (a -> b -> f c)
+    -> Property
+failsOnInvalidInput2 func
+    =    failsOnGens2 func genInvalid genUnchecked
+    .&&. failsOnGens2 func genUnchecked genInvalid
+
+validIfSucceedsOnGens2
+    :: (Show a, Show b, Show c, Show (f c),
+        Validity c, CanFail f)
+    => (a -> b -> f c)
+    -> Gen a -> Gen b
+    -> Property
+validIfSucceedsOnGens2 func genA genB =
+    forAll genA $ \a ->
+        forAll genB $ \b ->
+            case resultIfSucceeded (func a b) of
+                Nothing  -> return () -- Can happen
+                Just res -> res `shouldSatisfy` isValid
+
+validIfSucceeds2
+  :: (Show a, Show b, Show c, Show (f c),
+      GenValidity a, GenValidity b,
+      Validity c, CanFail f)
+  => (a -> b -> f c)
+  -> Property
+validIfSucceeds2 func
+    = validIfSucceedsOnGens2 func genUnchecked genUnchecked
 
 nameOf :: Typeable a => Proxy a -> String
 nameOf proxy =
