`do_curry` is very much related to `should_curry`.  I almost put it inside the function.  I don't think it should be as separated as this makes it.