diff --git a/mono-traversable.cabal b/mono-traversable.cabal
--- a/mono-traversable.cabal
+++ b/mono-traversable.cabal
@@ -1,5 +1,5 @@
 name:                mono-traversable
-version:             0.4.0.2
+version:             0.4.0.3
 synopsis:            Type classes for mapping, folding, and traversing monomorphic containers
 description:         Monomorphic variants of the Functor, Foldable, and Traversable typeclasses. Contains even more experimental code for abstracting containers and sequences.
 homepage:            https://github.com/snoyberg/mono-traversable
diff --git a/src/Data/MonoTraversable.hs b/src/Data/MonoTraversable.hs
--- a/src/Data/MonoTraversable.hs
+++ b/src/Data/MonoTraversable.hs
@@ -296,7 +296,7 @@
     {-# INLINE ofoldl1Ex' #-}
 
     headEx :: mono -> Element mono
-    headEx = ofoldr1Ex const
+    headEx = ofoldr const (Prelude.error "Data.MonoTraversable.headEx: empty")
     {-# INLINE headEx #-}
 
     lastEx :: mono -> Element mono
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -305,3 +305,5 @@
         test "lazy ByteString" L.empty
         test "strict Text" T.empty
         test "lazy Text" TL.empty
+    it "headEx on a list works #26" $
+        headEx (1 : filter Prelude.odd [2,4..]) `shouldBe` (1 :: Int)
