@@ -107,7 +107,7 @@ module Data.Text
107107 , drop
108108 , takeWhile
109109 , dropWhile
110− , dropAfter
110+ , dropWhileEnd
111111 , dropAround
112112 , strip
113113 , stripLeft
@@ -762,29 +762,32 @@ dropWhile p t@(Text arr off len) = loop 0 0
762762 unstream (S.dropWhile p (stream t)) = dropWhile p t
763763 #-}
764764
765−-- | /O(n)/ 'dropAfter' @p@ @t@ returns the prefix remaining after
765+-- | /O(n)/ 'dropWhileEnd' @p@ @t@ returns the prefix remaining after
766766-- dropping characters that fail the predicate @p@ from the end of
767−-- @t@. This function is subject to array fusion.
768−dropAfter :: (Char -> Bool) -> Text -> Text
769−dropAfter p t@(Text arr off len) = loop (len-1) len
767+-- @t@. Subject to fusion.
768+-- Examples:
769+--
770+-- > dropWhileEnd (=='.') "foo..." == "foo"
771+dropWhileEnd :: (Char -> Bool) -> Text -> Text
772+dropWhileEnd p t@(Text arr off len) = loop (len-1) len
770773 where loop !i !l | l <= 0 = empty
771774 | p c = loop (i+d) (l+d)
772775 | otherwise = Text arr off l
773776 where (c,d) = reverseIter t i
774−{-# INLINE [1] dropAfter #-}
777+{-# INLINE [1] dropWhileEnd #-}
775778
776779{-# RULES
777−"TEXT dropAfter -> fused" [~1] forall p t.
778− dropAfter p t = S.reverse (S.dropWhile p (S.reverseStream t))
779−"TEXT dropAfter -> unfused" [1] forall p t.
780− S.reverse (S.dropWhile p (S.reverseStream t)) = dropAfter p t
780+"TEXT dropWhileEnd -> fused" [~1] forall p t.
781+ dropWhileEnd p t = S.reverse (S.dropWhile p (S.reverseStream t))
782+"TEXT dropWhileEnd -> unfused" [1] forall p t.
783+ S.reverse (S.dropWhile p (S.reverseStream t)) = dropWhileEnd p t
781784 #-}
782785
783786-- | /O(n)/ 'dropAround' @p@ @t@ returns the substring remaining after
784787-- dropping characters that fail the predicate @p@ from both the
785788-- beginning and end of @t@. Subject to fusion.
786789dropAround :: (Char -> Bool) -> Text -> Text
787−dropAround p = dropWhile p . dropAfter p
790+dropAround p = dropWhile p . dropWhileEnd p
788791{-# INLINE [1] dropAround #-}
789792
790793-- | /O(n)/ Remove leading white space from a string. Equivalent to:
@@ -796,9 +799,9 @@ stripLeft = dropWhile isSpace
796799
797800-- | /O(n)/ Remove trailing white space from a string. Equivalent to:
798801--
799−-- > dropAfter isSpace
802+-- > dropWhileEnd isSpace
800803stripRight :: Text -> Text
801−stripRight = dropAfter isSpace
804+stripRight = dropWhileEnd isSpace
802805{-# INLINE [1] stripRight #-}
803806
804807-- | /O(n)/ Remove leading and trailing white space from a string.