in makeMove you match (leftCols, column:rightCols) = splitAt move board, but if the move is out of bounds that will crash your entire program. Instead, you should use a case expresssion
case splitAt move board of
(leftCols, column:rightCols) -> let updatedColumn = ....
_ -> error "invalid move" -- or Nothing if you do story 6
in
makeMove
you match(leftCols, column:rightCols) = splitAt move board
, but if the move is out of bounds that will crash your entire program. Instead, you should use a case expresssion