I would call this makeMove :: MacroGame -> Play -> Maybe MacroGame
Decide how your play is oriented: are you just taking the two indexes in 0...8, or do you need FOUR ints
Select appropriate microgame, update with the helper function, and then rpelace it. You can use a zip-with-index approach, or splitAt in a case expression
case splitAt num miniBoards of
(before, board:after) -> Just $ before ++ [update board] ++ after
_ -> Nothing
https://github.com/TU-CSCI2322-FL22/solver-connect-three/blob/3b398642bada87d610c043c993389cc52d8ec5ec/Main.hs#L83
makeMove :: MacroGame -> Play -> Maybe MacroGame
splitAt
in a case expression