
On 28 September 2011 19:19, Kazu Yamamoto
Hello,
Many languages provide the 'chop' or 'trip' function but Data.List does not. I would like to add a new function called 'tailDropWhile' so that people can easily implement 'chop' for String:
I don't think that "chop" is a very good name for this kind of function; by the name, I would think more a function of type Int -> [a] -> [[a]] that "chops up" a list into sub-lists of size n. "strip" (which I presume is what you meant as your second suggestion) is a bit better... That said, I think there's a good reason not to add this: if you're doing stuff at the end of a list, then you're probably doing something wrong. For this kind of textual task, you _really_ should be using text anyway, and this function is already implemented for you: http://hackage.haskell.org/packages/archive/text/0.11.1.5/doc/html/Data-Text...
chop :: String -> String chop = tailDropWhile isSpace
The definition of tailDropWhile is as follows:
{- wren ng thornton's version. This is lazier than Aoe's one. Out and inP implement push-down automata. -} tailDropWhile :: (a -> Bool) -> [a] -> [a] tailDropWhile p = out where out [] = [] out (x:xs) | p x = inP [x] xs | otherwise = x : out xs inP _ [] = [] inP ss (x:xs) | p x = inP (x:ss) xs | otherwise = reverse ss ++ x : out xs
{- Mitsutoshi Aoe's version. This is faster is many cases but more strict. Just for reference. tailDropWhile :: (a -> Bool) -> [a] -> [a] tailDropWhile p = foldr go [] where go x xs | p x && null xs = [] | otherwise = x:xs -}
For more information, please read: http://www.mail-archive.com/haskell-cafe@haskell.org/msg93192.html
Discussion period: 2 weeks.
-1 -- Ivan Lazar Miljenovic Ivan.Miljenovic@gmail.com IvanMiljenovic.wordpress.com