Evaluating usage of free monads to implement inversion-of-control-less game logic