diff --git a/deque.cabal b/deque.cabal
--- a/deque.cabal
+++ b/deque.cabal
@@ -1,7 +1,7 @@
 name:
   deque
 version:
-  0.2.4
+  0.2.5
 synopsis:
   Double-ended queue
 description:
@@ -42,5 +42,4 @@
   exposed-modules:
     Deque
   build-depends:
-    base >= 4.9 && < 5,
-    semigroups >= 0.11 && < 0.19
+    base >= 4.9 && < 5
diff --git a/library/Deque.hs b/library/Deque.hs
--- a/library/Deque.hs
+++ b/library/Deque.hs
@@ -9,6 +9,7 @@
 import Data.Maybe
 import Data.Monoid hiding ((<>))
 import Data.Semigroup
+import qualified Data.List as List
 
 -- |
 -- Double-ended queue (aka Dequeue or Deque) based on the head-tail linked list.
@@ -22,6 +23,16 @@
 fromList :: [a] -> Deque a
 fromList =
   Deque []
+
+-- |
+-- /O(n)/.
+-- Leave only the first elements satisfying the predicate.
+takeWhile :: (a -> Bool) -> Deque a -> Deque a
+takeWhile predicate (Deque snocList consList) =
+  let
+    newConsList = List.takeWhile predicate consList
+    newSnocList = List.takeWhile (not . predicate) snocList
+    in Deque newSnocList newConsList
 
 -- |
 -- /O(1)/, occasionally /O(n)/.
