Proposal (Trac ticket #3671): Add takeRec, genericTakeRec and spanRec to Data.List

Jules Bean jules at
Mon Nov 23 06:54:52 EST 2009

Christian Maeder wrote:
> My proposal would be to add a function like
> \begin{code}
> replaceBy :: ([a] -> (b, [a])) -> [a] -> [b]
> replaceBy splt l = case l of
>   [] -> []
>   _ -> let (ft, rt) = splt l in
>     ft : replaceBy splt rt
> \end{code}
> that takes a function "splt" that splits a non-empty list and returns a
> shorter list as second component (to ensure termination).

.... if we're in the business of proposing generalised search and 
replace I'd like to propose this one:

which is along the general lines above but slightly more general.

When I made that posting in 2007 I was hoping for name suggestions. In 
the absence of anythign better I suggest 'Data.List.transform' or the 
more whimsical 'Data.List.transmogrify'.

I would also suggest a convenience function 'Data.List.replace' defined 
from it in the obvious way.

I am also in agreement with 'groupsOf' (which I sometimes called 
'chunksOf' but I like both names) proposed by Yitzchak.

Will all that in mind I oppose this proposal, because whilst I fully 
support filling in some gaps in Data.List I don't think these are the 
best primitives.


More information about the Libraries mailing list