diff --git a/src/Data/Validity/ByteString.hs b/src/Data/Validity/ByteString.hs
--- a/src/Data/Validity/ByteString.hs
+++ b/src/Data/Validity/ByteString.hs
@@ -4,8 +4,31 @@
 
 import Data.Validity
 
-import Data.ByteString
+import qualified Data.ByteString as SB
+import qualified Data.ByteString.Internal as SB
+import qualified Data.ByteString.Lazy as LB
+import qualified Data.ByteString.Lazy.Internal as LB
 
--- | A 'ByteString' is trivially valid.
-instance Validity ByteString where
-    validate = trivialValidation
+-- | A 'ByteString' is NOT trivially valid.
+--
+-- The offset and the length both need to be positive.
+-- Note that the length does not need to be greater than, or equal to, the offset.
+--
+-- TODO there's nothing we can do about the foreign pointer, I think?
+instance Validity SB.ByteString where
+    validate (SB.PS _ off len) =
+        mconcat
+            [ delve "offset" off
+            , delve "length" len
+            , declare "The offset is positive" $ off >= 0
+            , declare "The length is positive" $ len >= 0
+            ]
+
+-- | A lazy 'ByteString' is valid according to its chunks.
+instance Validity LB.ByteString where
+    validate = go 0
+      where
+        go :: Int -> LB.ByteString -> Validation
+        go _ LB.Empty = valid
+        go i (LB.Chunk sb lb) =
+            mconcat [delve (unwords ["Chunk number", show i]) sb, go (i + 1) lb]
diff --git a/validity-bytestring.cabal b/validity-bytestring.cabal
--- a/validity-bytestring.cabal
+++ b/validity-bytestring.cabal
@@ -1,11 +1,13 @@
--- This file has been generated from package.yaml by hpack version 0.28.2.
+cabal-version: >= 1.10
+
+-- This file has been generated from package.yaml by hpack version 0.29.6.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 87158cbef7a325a4a27cff0303b6fece923e4dada1f3495d335d9717b43766c3
+-- hash: 39a9c7df71e39fed88350a4e7577fe2f925f85ee16da092f8d6194ca70b7e561
 
 name:           validity-bytestring
-version:        0.3.0.2
+version:        0.4.0.0
 synopsis:       Validity instances for bytestring
 description:    Please see README.md
 category:       Validity
@@ -18,21 +20,20 @@
 license:        MIT
 license-file:   LICENSE
 build-type:     Simple
-cabal-version:  >= 1.10
 
 source-repository head
   type: git
   location: https://github.com/NorfairKing/validity
 
 library
+  exposed-modules:
+      Data.Validity.ByteString
+  other-modules:
+      Paths_validity_bytestring
   hs-source-dirs:
       src
   build-depends:
       base >=4.7 && <5
     , bytestring
     , validity >=0.5
-  exposed-modules:
-      Data.Validity.ByteString
-  other-modules:
-      Paths_validity_bytestring
   default-language: Haskell2010
