package bin; import lib.CLIAppBase; using tink.CoreApi; class Turtle extends CLIAppBase { public function new() { registerSyncSubcommand("forward", (args) -> { return checkAvailable() && perform(kernel.turtle.Turtle.forward()); }); registerSyncSubcommand("back", (args) -> { return checkAvailable() && perform(kernel.turtle.Turtle.back()); }); registerSyncSubcommand("left", (args) -> { return checkAvailable() && perform(kernel.turtle.Turtle.turnLeft()); }); registerSyncSubcommand("right", (args) -> { return checkAvailable() && perform(kernel.turtle.Turtle.turnRight()); }); registerSyncSubcommand("up", (args) -> { return checkAvailable() && perform(kernel.turtle.Turtle.up()); }); registerSyncSubcommand("down", (args) -> { return checkAvailable() && perform(kernel.turtle.Turtle.down()); }); } private function checkAvailable():Bool { if (!kernel.turtle.Turtle.isTurtle()) { handle.write("This is not a turtle!"); return false; } return true; } private function perform(outcome:Outcome):Bool { switch outcome { case Success(_): return true; case Failure(error): handle.write(error); return false; } } }