Add examples with D-style ranges. The main unattractive thing about ranges, for me, is the need to specify what happens when the methods are called in an order that violates the contract.