Improving CL code following feedback.

Note that `swap` still has a bug if used with places that have side
effects, see https://news.ycombinator.com/item?id=8317599