 
            On Tue, 2009-11-17 at 14:35 +0000, Ian Lynagh wrote:
I don't think spanRec does what you want:
take 10 $ spanRec (< 3) [1,2,3,4,5,6,1,2,3,4,5,6] [[1,2],[],[],[],[],[],[],[],[],[]]
I have also defined your "takeRec" a number of times in the past, but I have called it something like "splitAts". I've also defined functions called "breaks". I think the 's' suffix is more consistent with "tails", "inits" etc.
Dear Ian, et al. I posted the proposal too quickly. Two corrections and *still* missed it. I should have dug up my PreludeEx from somewhere. You are right about the mistake, though. Also, I also usually use the 's' suffix, but thought it could possibly be considered too invasive in the namespace. If no one objects to +s names, then I actually prefer it. When also including spans antonym 'breaks', they can actually be defined in mutually recursive fashion. Thus, the new proposal: splitAts :: Int -> [a] -> [[a]] splitAts = genericSplitAts genericSplitAts :: (Integral a) => a -> [b] -> [[b]] genericSplitAts n _ | n <= 0 = [] genericSplitAts _ [] = [] genericSplitAts i xs = let (hs,ts) = genericSplitAt i xs in hs : genericSplitAts i ts spans :: (a -> Bool) -> [a] -> [[a]] spans _ [] = [] spans p xs = let (hs,ts) = span p xs in hs : breaks p ts breaks :: (a -> Bool) -> [a] -> [[a]] breaks _ [] = [] breaks p xs = let (hs,ts) = break p xs in hs : spans p ts Am I chalking you up as a +1? Regrads, Philip