[Haskell-cafe] Simple list processing

Andrew Coppin andrewcoppin at btinternet.com
Wed Jun 11 14:17:03 EDT 2008

OK, so this is a fairly basic question about list processing.

Several times now, I have found myself wanting to process a list to 
produce a new list. However, the way later elements are processed 
depends on what the earlier elements are - in other words, this isn't a 
simple "map".

What is the best way to handle this?

According to the theory, anything that consumes a list and produces a 
value is some kind of fold. [Assuming it traverses the list in a 
sensible order!] So it looks like you could implement this as a fold. 
But should that be a LEFT-fold or a RIGHT-fold? (I always get confused 
between the two!)

Actually, anything that takes a value and processes it repeatedly to 
produce a list is technically an unfold. [Again assuming a sensible 
processing order.] So it looks like this function could also be an 
UNfold. As in, you take a list as input, and keep unfolding until that 
list becomes empty.

So it looks like this can be implemented as a fold or an unfold. But 
neither way looks especially easy. Both of these patterns seem to be 
more general than necessary; I only want to take 1 element of input and 
produce 1 element of output, but keeping track of a running state. I 
guess I could use some sort of state monad and make the whole thing 
monadic - but that again is overkill for what I'm trying to do.

Any hints here?

More information about the Haskell-Cafe mailing list