allAbilitiesOnField :: Monad m => StateT GameState m [(CardID, Ability)]
allAbilitiesOnField = do
  s <- get
  let allCardIDs = s^..players.traversed.field.traversed
      allCards = map (\cID -> s^._card cID) allCardIDs
      cardToAbilityList card = map (\a->(card^.cardID, a)) (card^.abilities)
  return $ concatMap cardToAbilityList allCards ++ (s^.untilEndOfTurnEffects)
allAbilitiesOnField :: Monad m => StateT GameState m [(CardID, Ability)]
allAbilitiesOnField = do
  s <- get
  let allCardIDs = s^..players.traversed.field.traversed
      allCards = map (\cID -> s^._card cID) allCardIDs
      cardToAbilityList card = map (\a->(card^.cardID, a)) (card^.abilities)
  return $ concatMap cardToAbilityList allCards ++ (s^.untilEndOfTurnEffects)
allAbilitiesOnField = do
  s <- get
  let allCardIDs = s^..players.traversed.field.traversed
      allCards = map (\cID -> s^._card cID) allCardIDs
      cardToAbilityList card = map (\a->(card^.cardID, a)) (card^.abilities)
  return $ concatMap cardToAbilityList allCards ++ (s^.untilEndOfTurnEffects)