On Dec 3, 2004, at 1:28 PM, Steven Huwig wrote:
I am basically a newbie at Haskell, and have been experimenting with
it where typically I would use Python.
...
2) Do unravel and ravel have any other practical uses on their own?
Looking at it, I think they could be used in a single function
of type f :: (a->Bool) -> ([a] -> [a]) -> [a] -> [a]
Can one get that function out of the Prelude in an easier manner
than
above? Is there a simpler way to get that functionality besides
composing ravel and unravel with a map in between?
(Bad form to self-reply, I know.) The answer to that question is yes.
--
mapGroups :: (a -> Bool) -> ([a] -> [a]) -> [a] -> [a]
mapGroups = mapGroups' []
mapGroups' :: [a] -> (a -> Bool) -> ([a] -> [a]) -> [a] -> [a]
mapGroups' acc _ _ [] = acc
mapGroups' acc p f z@(x:_)
| p x = mapGroups' (acc ++ f part1) p f part2
| otherwise = mapGroups' (acc ++ part1') p f part2'
where (part1, part2) = span p z
(part1', part2') = span (not . p) z
mapWords = mapGroups (not . isSpace)
initcap :: String -> String
initcap (c:cs) = toUpper c:[toLower c' | c' <- cs]
main = putStrLn (mapWords initcap "This\nis\t\ta test\n")
--
Now I can solicit your remarks yet again :)
-- Steven Huwig
_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe