setPieceAndStartAnew :: Game ()
setPieceAndStartAnew = do
  newNextBlock <- spawnBlock
  gs <- get
  let current = currentPiece gs
      nextp = (nextPiece gs) { position = (4, 1) }
      newBoard = combineAt (position current) (guts current) (board gs)
  put $ gs { currentPiece = nextp
           , nextPiece = newNextBlock { position = (12, 8) }
           , board = newBoard
           }
  removeFullRowsFromBoard
  canSetNew <- checkPieceCanMove nextp 0 0
  when (not canSetNew) $ setGameOver True
setPieceAndStartAnew :: Game ()
setPieceAndStartAnew = do
  newNextBlock <- spawnBlock
  gs <- get
  let current = currentPiece gs
      nextp = (nextPiece gs) { position = (4, 1) }
      newBoard = combineAt (position current) (guts current) (board gs)
  put $ gs { currentPiece = nextp
           , nextPiece = newNextBlock { position = (12, 8) }
           , board = newBoard
           }
  removeFullRowsFromBoard
  canSetNew <- checkPieceCanMove nextp 0 0
  when (not canSetNew) $ setGameOver True
setPieceAndStartAnew = do
  newNextBlock <- spawnBlock
  gs <- get
  let current = currentPiece gs
      nextp = (nextPiece gs) { position = (4, 1) }
      newBoard = combineAt (position current) (guts current) (board gs)
  put $ gs { currentPiece = nextp
           , nextPiece = newNextBlock { position = (12, 8) }
           , board = newBoard
           }
  removeFullRowsFromBoard
  canSetNew <- checkPieceCanMove nextp 0 0
  when (not canSetNew) $ setGameOver True