Implement take_while. This involved changing EVERYTHING