diff --git a/library/StrictList.hs b/library/StrictList.hs
--- a/library/StrictList.hs
+++ b/library/StrictList.hs
@@ -170,6 +170,21 @@
   Nil -> Nil
 
 {-|
+An optimized version of the same predicate applied to `takeWhile` and `dropWhile`.
+IOW,
+
+>span predicate list = (takeWhile predicate list, dropWhile predicate list)
+-}
+span :: (a -> Bool) -> List a -> (List a, List a)
+span predicate = let
+  buildPrefix !prefix = \ case
+    Cons head tail -> if predicate head
+      then buildPrefix (Cons head prefix) tail
+      else (reverse prefix, Cons head tail)
+    _ -> (reverse prefix, Nil)
+  in buildPrefix Nil
+
+{-|
 Same as @(`takeWhile` predicate . `reverse`)@.
 E.g., 
 
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.0.1
+version: 0.1.1
 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
@@ -1,6 +1,6 @@
 module Main where
 
-import Prelude hiding (choose, reverse, toList, List, filter, take, drop, takeWhile, dropWhile, head, last, tail, init)
+import Prelude hiding (span, choose, reverse, toList, List, filter, take, drop, takeWhile, dropWhile, head, last, tail, init)
 import GHC.Exts as Exports (IsList(..))
 import Test.QuickCheck.Instances
 import Test.Tasty
@@ -46,6 +46,9 @@
     ,
     testProperty "dropWhile" $ forAll ((,) <$> predicateGen <*> strictAndLazyListGen) $ \ (predicate, (strict, lazy)) ->
     toList (dropWhile predicate strict) === Lazy.dropWhile predicate lazy
+    ,
+    testProperty "span" $ forAll ((,) <$> predicateGen <*> strictAndLazyListGen) $ \ (predicate, (strict, lazy)) ->
+    bimap toList toList (span predicate strict) === Lazy.span predicate lazy
     ,
     testProperty "takeWhileFromEnding" $ forAll ((,) <$> predicateGen <*> strictAndLazyListGen) $ \ (predicate, (strict, lazy)) ->
     toList (takeWhileFromEnding predicate strict) === Lazy.takeWhile predicate (Lazy.reverse lazy)
