
Hi, Am Mittwoch, den 28.05.2008, 23:53 +0200 schrieb Pieter Laeremans:
Hello,
I need a break function that splits the list one element further than the ordinary break. This is the simplest solution I could imagine:
breakI :: (a -> Bool) -> [a] -> ([a], [a]) breakI p s = case break p s of ([], []) -> ([], []) (x, []) -> (x, []) (x, l) -> (x ++ [head l], tail l )
Is there a better way to write this ?
appending an element to a list is expensive, so if this is a problem you can try this: breakI _ [] = ([], []) breakI p (x:xs') | p x = ([x],xs') | otherwise = let (ys,zs) = breakI p xs' in (x:ys,zs) It is basically the Prelude.break from http://haskell.org/ghc/docs/latest/html/libraries/base/src/GHC-List.html#bre... with the forth line (with p x) changed. Greetings, Joachim -- Joachim "nomeata" Breitner mail: mail@joachim-breitner.de | ICQ# 74513189 | GPG-Key: 4743206C JID: nomeata@joachim-breitner.de | http://www.joachim-breitner.de/ Debian Developer: nomeata@debian.org