refactored makeMove to use Either, not IO; deleted getMove and moved its logic into loop