diff --git a/src/Data/UniformPair.hs b/src/Data/UniformPair.hs
--- a/src/Data/UniformPair.hs
+++ b/src/Data/UniformPair.hs
@@ -76,8 +76,15 @@
 -- | Update a component, indexing by 'False' for the first element and 'True' for
 -- the second.
 onElemP :: Bool -> (a -> a) -> Pair a -> Pair a
-onElemP False f (a :# b) = f a :# b
-onElemP True  f (a :# b) = a :# f b
+onElemP c f ~(a :# b) | c         = f a :# b
+                      | otherwise = a :# f b
+
+-- -- Too strict:
+-- onElemP False f (a :# b) = f a :# b
+-- onElemP True  f (a :# b) = a :# f b
+
+-- onElemP False = \ f (a :# b) -> f a :# b
+-- onElemP True  = \ f (a :# b) -> a :# f b
 
 -- | Extract an element, indexing by 'False' for the first element and 'True'
 -- for the second.
diff --git a/uniform-pair.cabal b/uniform-pair.cabal
--- a/uniform-pair.cabal
+++ b/uniform-pair.cabal
@@ -1,5 +1,5 @@
 Name:                uniform-pair
-Version:             0.1.7
+Version:             0.1.8
 Cabal-Version:       >= 1.6
 Synopsis:            Uniform pairs with class instances
 Category:            Data
