I've changed the "if minimum < 3" line with an "any (< 3)" line. This has sped up the performance to be good enough. (I assume that I have to calculate the Lev. distance of all the 9-mers in order to take the minimum. I really only care if any element has a Lev. distance less than three, so I can stop when I find the first.) The rest of this discussion is purely for fun.
I've swapped "y:ys" for "ys ++ [y]", and while the output is reversed, I don't appear to be able to take the first n elements still. I haven't timed how long the program takes now to see if it blows up. Rein, I don't quite understand your answer; I may need you to be more explicit if I don't figure this out. Part of what confuses me is that the recursion takes place in merge, and the (:) is in addInto. I think your comment has given me an idea, so I'm going to take some time to play with this in the afternoon, so I'll send an update tonight.
Thanks for looking at this!
-- Mason