play :: Game -> Vector Int
play g =
  fst . foldl' go (_scores g, C.singleton 0) $ zip moves pieces
 where
  go (!ss, !circle) (!turn, !piece) =
    first (\points -> ss & ix turn +~ points) $ move circle piece
  moves  = [i `mod` numPlayers g | i <- [0 ..]]
  pieces = [1 .. _lastMarble g]
play :: Game -> Vector Int
play g =
  fst . foldl' go (_scores g, C.singleton 0) $ zip moves pieces
 where
  go (!ss, !circle) (!turn, !piece) =
    first (\points -> ss & ix turn +~ points) $ move circle piece
  moves  = [i `mod` numPlayers g | i <- [0 ..]]
  pieces = [1 .. _lastMarble g]
play g =
  fst . foldl' go (_scores g, C.singleton 0) $ zip moves pieces
 where
  go (!ss, !circle) (!turn, !piece) =
    first (\points -> ss & ix turn +~ points) $ move circle piece
  moves  = [i `mod` numPlayers g | i <- [0 ..]]
  pieces = [1 .. _lastMarble g]