[commit: base] master: Add "dropWhileEnd", as discussed on the libraries list (216cfb1)
Simon Marlow
marlowsd at gmail.com
Tue Nov 15 13:52:18 CET 2011
Repository : ssh://darcs.haskell.org//srv/darcs/packages/base
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/216cfb1969238b403fec5e08f4bf1f8a8772734b
>---------------------------------------------------------------
commit 216cfb1969238b403fec5e08f4bf1f8a8772734b
Author: Simon Marlow <marlowsd at gmail.com>
Date: Mon Nov 14 12:40:03 2011 +0000
Add "dropWhileEnd", as discussed on the libraries list
>---------------------------------------------------------------
Data/List.hs | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/Data/List.hs b/Data/List.hs
index 4edd9eb..55e3dd2 100644
--- a/Data/List.hs
+++ b/Data/List.hs
@@ -95,6 +95,7 @@ module Data.List
, takeWhile -- :: (a -> Bool) -> [a] -> [a]
, dropWhile -- :: (a -> Bool) -> [a] -> [a]
+ , dropWhileEnd -- :: (a -> Bool) -> [a] -> [a]
, span -- :: (a -> Bool) -> [a] -> ([a], [a])
, break -- :: (a -> Bool) -> [a] -> ([a], [a])
@@ -228,6 +229,16 @@ infix 5 \\ -- comment to fool cpp
-- -----------------------------------------------------------------------------
-- List functions
+-- | The 'dropWhileEnd' function drops the largest suffix of a list
+-- in which the given predicate holds for all elements. For example:
+--
+-- > dropWhileEnd isSpace "foo\n" == "foo"
+-- > dropWhileEnd isSpace "foo bar" == "foo bar"
+-- > dropWhileEnd isSpace ("foo\n" ++ undefined) == "foo" ++ undefined
+
+dropWhileEnd :: (a -> Bool) -> [a] -> [a]
+dropWhileEnd p = foldr (\x xs -> if p x && null xs then [] else x : xs) []
+
-- | The 'stripPrefix' function drops the given prefix from a list.
-- It returns 'Nothing' if the list did not start with the prefix
-- given, or 'Just' the list after the prefix, if it does.
More information about the Cvs-libraries
mailing list