detach :: Monad m => CardID -> StateT GameState m ()
detach cID = do
  s <- get
  case s^.card cID.attachedTo of
    Nothing -> return ()
    Just host -> do
      _card host.attachedCards %= delete cID
      _card cID.attachedTo .= Nothing
detach :: Monad m => CardID -> StateT GameState m ()
detach cID = do
  s <- get
  case s^.card cID.attachedTo of
    Nothing -> return ()
    Just host -> do
      _card host.attachedCards %= delete cID
      _card cID.attachedTo .= Nothing
detach cID = do
  s <- get
  case s^.card cID.attachedTo of
    Nothing -> return ()
    Just host -> do
      _card host.attachedCards %= delete cID
      _card cID.attachedTo .= Nothing