Copy IO exercise from gist/markhibberd. Issue #34.