diff --git a/genvalidity.cabal b/genvalidity.cabal
--- a/genvalidity.cabal
+++ b/genvalidity.cabal
@@ -1,5 +1,5 @@
 name: genvalidity
-version: 0.4.0.0
+version: 0.4.0.1
 cabal-version: >=1.10
 build-type: Simple
 license: MIT
@@ -47,7 +47,7 @@
         Data.GenRelativeValidity
     build-depends:
         base >=4.7 && <5,
-        validity >=0.4 && <0.5,
+        validity >=0.4.0.1 && <0.5,
         QuickCheck >=2.7 && <2.10
     default-language: Haskell2010
     hs-source-dirs: src
diff --git a/src/Data/GenValidity.hs b/src/Data/GenValidity.hs
--- a/src/Data/GenValidity.hs
+++ b/src/Data/GenValidity.hs
@@ -63,6 +63,7 @@
 import Data.Validity
 
 import Data.Fixed (Fixed(..), HasResolution)
+import Data.List.NonEmpty (NonEmpty((:|)))
 import Data.Word (Word, Word8, Word16, Word32, Word64)
 import GHC.Generics
 import GHC.Real (Ratio(..))
@@ -287,6 +288,21 @@
 instance GenUnchecked a => GenUnchecked [a] where
     genUnchecked = genListOf genUnchecked
     shrinkUnchecked = shrinkList shrinkUnchecked
+
+instance GenUnchecked a => GenUnchecked (NonEmpty a) where
+    genUnchecked = (:|) <$> genUnchecked <*> genUnchecked
+    shrinkUnchecked (v :| vs) = [ e :| es | (e, es) <- shrinkUnchecked (v, vs)]
+
+instance GenValid a => GenValid (NonEmpty a) where
+    genValid = (:|) <$> genValid <*> genValid
+
+instance GenInvalid a => GenInvalid (NonEmpty a) where
+    genInvalid = sized $ \n -> do
+      (a, b) <- genSplit n
+      oneof
+        [ (:|) <$> resize a genUnchecked <*> resize b genInvalid
+        , (:|) <$> resize a genInvalid <*> resize b genUnchecked
+        ]
 
 -- | If we can generate values of a certain type, we can also generate lists of
 -- them.
