runOnEndStepTriggers :: StateT GameState IO ()
runOnEndStepTriggers = do
  s <- get
  triggeredAbilities <- allTriggeredAbilities
  let withCorrectTrigger =
        filter (\ (_,(Triggered t _)) -> t == OnEndStep) triggeredAbilities
  forM_ withCorrectTrigger $ \(cardWithAbility, (Triggered _ f)) -> do
    pID <- playerControllingCard cardWithAbility
    f $ OnEndStepInfo cardWithAbility pID
runOnEndStepTriggers :: StateT GameState IO ()
runOnEndStepTriggers = do
  s <- get
  triggeredAbilities <- allTriggeredAbilities
  let withCorrectTrigger =
        filter (\ (_,(Triggered t _)) -> t == OnEndStep) triggeredAbilities
  forM_ withCorrectTrigger $ \(cardWithAbility, (Triggered _ f)) -> do
    pID <- playerControllingCard cardWithAbility
    f $ OnEndStepInfo cardWithAbility pID
runOnEndStepTriggers = do
  s <- get
  triggeredAbilities <- allTriggeredAbilities
  let withCorrectTrigger =
        filter (\ (_,(Triggered t _)) -> t == OnEndStep) triggeredAbilities
  forM_ withCorrectTrigger $ \(cardWithAbility, (Triggered _ f)) -> do
    pID <- playerControllingCard cardWithAbility
    f $ OnEndStepInfo cardWithAbility pID