diff --git a/CHANGES.txt b/CHANGES.txt
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,7 @@
 Changelog for Safe
 
+0.3.21, released 2024-01-18
+    #34, mark headErr/tailErr as Partial
 0.3.20, released 2024-01-14
     #34, add headErr, tailErr
     #33, avoid using head/tail to avoid x-partial
diff --git a/Safe.hs b/Safe.hs
--- a/Safe.hs
+++ b/Safe.hs
@@ -106,7 +106,7 @@
 --
 -- > tailErr [] = error "Prelude.tail: empty list"
 -- > tailErr [1,2,3] = [2,3]
-tailErr :: [a] -> [a]
+tailErr :: Partial => [a] -> [a]
 tailErr = tail
 
 -- | Identical to 'head', namely that fails on an empty list.
@@ -114,7 +114,7 @@
 --
 -- > headErr [] = error "Prelude.head: empty list"
 -- > headErr [1,2,3] = 1
-headErr :: [a] -> a
+headErr :: Partial => [a] -> a
 headErr = head
 
 -- |
diff --git a/safe.cabal b/safe.cabal
--- a/safe.cabal
+++ b/safe.cabal
@@ -1,7 +1,7 @@
 cabal-version:  1.18
 build-type:     Simple
 name:           safe
-version:        0.3.20
+version:        0.3.21
 license:        BSD3
 license-file:   LICENSE
 category:       Unclassified
