Yes, I did get to the point where I thought I could do it with the combinators, but this seemed  slightly more obvious, maybe just because of familiarity though.  

Also, yes on the memory leak front. I'll have a go at doing something a bit more sensible.