Now it compiles... through thorroughly untested