diff --git a/library/StrictList.hs b/library/StrictList.hs
--- a/library/StrictList.hs
+++ b/library/StrictList.hs
@@ -243,6 +243,20 @@
   in loop Nil Nil
 
 {-|
+Same as @(`span` predicate . `reverse`)@.
+-}
+spanFromEnding :: (a -> Bool) -> List a -> (List a, List a)
+spanFromEnding predicate = let
+  loop !confirmedPrefix !unconfirmedPrefix !suffix = \ case
+    Cons head tail -> if predicate head
+      then loop confirmedPrefix (Cons head unconfirmedPrefix) (Cons head suffix) tail
+      else let
+        !prefix = Cons head unconfirmedPrefix
+        in loop prefix prefix Nil tail
+    Nil -> (suffix, confirmedPrefix)
+  in loop Nil Nil Nil
+
+{-|
 Get the first element and the remainder of the list if it's not empty.
 -}
 uncons :: List a -> Maybe (a, List a)
diff --git a/strict-list.cabal b/strict-list.cabal
--- a/strict-list.cabal
+++ b/strict-list.cabal
@@ -1,5 +1,5 @@
 name: strict-list
-version: 0.1.3
+version: 0.1.4
 synopsis: Strict linked list
 description:
   Implementation of strict linked list with care taken about stack.
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -59,6 +59,9 @@
     testProperty "dropWhileFromEnding" $ forAll ((,) <$> predicateGen <*> strictAndLazyListGen) $ \ (predicate, (strict, lazy)) ->
     toList (dropWhileFromEnding predicate strict) === Lazy.dropWhile predicate (Lazy.reverse lazy)
     ,
+    testProperty "spanFromEnding" $ forAll ((,) <$> predicateGen <*> strictAndLazyListGen) $ \ (predicate, (strict, lazy)) ->
+    bimap toList toList (spanFromEnding predicate strict) === Lazy.span predicate (Lazy.reverse lazy)
+    ,
     testProperty "head" $ forAll strictAndLazyListGen $ \ (strict, lazy) ->
     head strict === listToMaybe lazy
     ,
