diff --git a/deque.cabal b/deque.cabal
--- a/deque.cabal
+++ b/deque.cabal
@@ -1,5 +1,5 @@
 name: deque
-version: 0.4.1
+version: 0.4.2
 synopsis: Double-ended queues
 description:
   Strict and lazy implementations of Double-Ended Queue (aka Dequeue or Deque)
diff --git a/library/Deque/Lazy/Reader.hs b/library/Deque/Lazy/Reader.hs
--- a/library/Deque/Lazy/Reader.hs
+++ b/library/Deque/Lazy/Reader.hs
@@ -102,6 +102,13 @@
 dropWhile predicate = reader (Deque.dropWhile predicate)
 
 {-|
+/O(n)/.
+Same as @(,) <$> `takeWhile` predicate <*> `dropWhile` predicate@.
+-}
+span :: MonadReader (Deque a) m => (a -> Bool) -> m (Deque a, Deque a)
+span predicate = reader (Deque.span predicate)
+
+{-|
 /O(1)/, occasionally /O(n)/.
 Get the first element and deque without it if it's not empty.
 -}
diff --git a/library/Deque/Lazy/State.hs b/library/Deque/Lazy/State.hs
--- a/library/Deque/Lazy/State.hs
+++ b/library/Deque/Lazy/State.hs
@@ -102,6 +102,13 @@
 dropWhile predicate = modify (Deque.dropWhile predicate)
 
 {-|
+/O(n)/.
+Return the first elements satisfying the predicate, removing them from the state.
+-}
+span :: MonadState (Deque a) m => (a -> Bool) -> m (Deque a)
+span predicate = state (Deque.span predicate)
+
+{-|
 /O(1)/, occasionally /O(n)/.
 Get the first element if deque is not empty,
 removing the element.
diff --git a/library/Deque/Strict/Reader.hs b/library/Deque/Strict/Reader.hs
--- a/library/Deque/Strict/Reader.hs
+++ b/library/Deque/Strict/Reader.hs
@@ -102,6 +102,13 @@
 dropWhile predicate = reader (Deque.dropWhile predicate)
 
 {-|
+/O(n)/.
+Same as @(,) <$> `takeWhile` predicate <*> `dropWhile` predicate@.
+-}
+span :: MonadReader (Deque a) m => (a -> Bool) -> m (Deque a, Deque a)
+span predicate = reader (Deque.span predicate)
+
+{-|
 /O(1)/, occasionally /O(n)/.
 Get the first element and deque without it if it's not empty.
 -}
diff --git a/library/Deque/Strict/State.hs b/library/Deque/Strict/State.hs
--- a/library/Deque/Strict/State.hs
+++ b/library/Deque/Strict/State.hs
@@ -102,6 +102,13 @@
 dropWhile predicate = modify (Deque.dropWhile predicate)
 
 {-|
+/O(n)/.
+Return the first elements satisfying the predicate, removing them from the state.
+-}
+span :: MonadState (Deque a) m => (a -> Bool) -> m (Deque a)
+span predicate = state (Deque.span predicate)
+
+{-|
 /O(1)/, occasionally /O(n)/.
 Get the first element if deque is not empty,
 removing the element.
