removeDeadCreatures :: StateT GameState IO ()
removeDeadCreatures = do
  state <- get
  let
    idsOnField :: [CardID]
    idsOnField = state^..players.traversed.field.traversed
    dead :: [CardID]
    dead = filter (\c -> (state^.card c.stats._2) <= state^.card c.damage &&
                         Creature `elem` state^.card c.cardType)
           idsOnField
    attackerID = state^.currentPlayerID
  forM_ dead $ \deadID -> do
    attackers %= delete deadID
    blockers %= filter (\(b,a) -> b /= deadID)
    killCard deadID
removeDeadCreatures :: StateT GameState IO ()
removeDeadCreatures = do
  state <- get
  let
    idsOnField :: [CardID]
    idsOnField = state^..players.traversed.field.traversed
    dead :: [CardID]
    dead = filter (\c -> (state^.card c.stats._2) <= state^.card c.damage &&
                         Creature `elem` state^.card c.cardType)
           idsOnField
    attackerID = state^.currentPlayerID
  forM_ dead $ \deadID -> do
    attackers %= delete deadID
    blockers %= filter (\(b,a) -> b /= deadID)
    killCard deadID
removeDeadCreatures = do
  state <- get
  let
    idsOnField :: [CardID]
    idsOnField = state^..players.traversed.field.traversed
    dead :: [CardID]
    dead = filter (\c -> (state^.card c.stats._2) <= state^.card c.damage &&
                         Creature `elem` state^.card c.cardType)
           idsOnField
    attackerID = state^.currentPlayerID
  forM_ dead $ \deadID -> do
    attackers %= delete deadID
    blockers %= filter (\(b,a) -> b /= deadID)
    killCard deadID