module Solutions.RavnicaAllegiance5 where

import Dovin.V2

tapWithFreyalise :: ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
tapWithFreyalise ManaString
mana ManaString
card = do
  CardMatcher
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
validate CardMatcher
matchInPlay ManaString
"Song of Freyalise"
  ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
tapForMana ManaString
mana ManaString
card

-- Approach:
--   * Song of Freyalise and tapping creatures for mana
--   * Use Depths to clear first creature
--   * Use Wildgrowth Walker to gain life (which untaps Famished Paladin)
--   * Use Vona x 4 to clear opponent's board
--   * Attack with all with +1/+1 from Roar and an explore for lethal
solution :: GameMonad ()
solution :: ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
solution = do
  ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a. ManaString -> GameMonad a -> GameMonad a
step ManaString
"Initial state" (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
    Player
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
as Player
Opponent (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ Int
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
setLife Int
16
    Player
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
as Player
Active (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ Int
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
setLife Int
17

    Location
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
withLocation Location
Graveyard (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
      ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addLand ManaString
"Forest"
      ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addLand ManaString
"Swamp"

    Location
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
withLocation Location
Hand (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
      ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addEnchantment ManaString
"Song of Freyalise"
      (Int, Int)
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addCreature (Int
1, Int
3) ManaString
"Wildgrowth Walker"
      (Int, Int)
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addCreature (Int
2, Int
1) ManaString
"Merfolk Branchwalker"
      ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addSorcery ManaString
"Enter the Unknown"
      ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addInstant ManaString
"Rallying Roar"
      ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addInstant ManaString
"Depths of Desire"

    Location
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
withLocation Location
Play (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
      ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addEnchantment ManaString
"Fall of the Thran"
      ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addEnchantment ManaString
"Path of Discovery"
      (Int, Int)
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addCreature (Int
3, Int
3) ManaString
"Famished Paladin"
      ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
withAttribute ManaString
vigilance (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
        (Int, Int)
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addCreature (Int
4, Int
4) ManaString
"Vona, Butcher of Magan"
        (Int, Int)
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addCreature (Int
2, Int
3) ManaString
"Tenth District Veteran"
      (Int, Int)
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addCreature (Int
2, Int
5) ManaString
"Cacophodon"
      Int
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addPlaneswalker Int
3 ManaString
"Jace, Ingenious Mind-Mage"

    Player
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
as Player
Opponent (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
      Location
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
withLocation Location
Play (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
        (Int, Int)
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addCreature (Int
3, Int
4) ManaString
"Temple Altisaur"
        (Int, Int)
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addCreature (Int
2, Int
2) ManaString
"Everdawn Champion"
        (Int, Int)
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addCreature (Int
2, Int
4) ManaString
"Baird, Steward of Argive"
        (Int, Int)
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addCreature (Int
2, Int
1) ManaString
"Dauntless Bodyguard"
        (Int, Int)
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addCreature (Int
3, Int
5) ManaString
"Imperial Ceratops"

  ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a. ManaString -> GameMonad a -> GameMonad a
step ManaString
"Return lands from Fall of Thran trigger" (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
trigger ManaString
"" ManaString
"Fall of the Thran" ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop
    Location
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
moveTo Location
Play ManaString
"Forest"
    Location
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
moveTo Location
Play ManaString
"Swamp"

  ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a. ManaString -> GameMonad a -> GameMonad a
step ManaString
"Cast Song of Freyalise" (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
tapForMana ManaString
"G" ManaString
"Forest"
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
tapForMana ManaString
"B" ManaString
"Swamp"
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
cast ManaString
"1G" ManaString
"Song of Freyalise" ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop

  ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a. ManaString -> GameMonad a -> GameMonad a
step ManaString
"Use Vona to destroy Bodyguard" (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
    ManaString
-> ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
activate ManaString
"Destroy" ManaString
"" ManaString
"Vona, Butcher of Magan"
    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
tap ManaString
"Vona, Butcher of Magan"
    Int
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
loseLife Int
7

    ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop

    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
target ManaString
"Dauntless Bodyguard"
    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
destroy ManaString
"Dauntless Bodyguard"

  ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a. ManaString -> GameMonad a -> GameMonad a
step ManaString
"Cast Depths on Altisaur using creatures" (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
    CardMatcher
-> (ManaString
    -> ExceptT
         ManaString
         (ReaderT Env (StateT Board (WriterT [Step] Identity)))
         ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forCards (Player -> CardMatcher
matchController Player
Active CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> CardMatcher
matchInPlay CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher
matchAttribute ManaString
creature CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher
missingAttribute ManaString
tapped CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher
missingAttribute ManaString
summoned) (ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
tapWithFreyalise ManaString
"U")

    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
cast ManaString
"2U" ManaString
"Depths of Desire" ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop

    Player
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
as Player
Opponent (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$
      Location
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
moveTo Location
Hand ManaString
"Temple Altisaur"
    Location
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
withLocation Location
Play (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
withAttribute ManaString
token (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addArtifact ManaString
"Treasure"

  ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a. ManaString -> GameMonad a -> GameMonad a
step ManaString
"Untap with Jace" (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
    ManaString
-> Int
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
activatePlaneswalker ManaString
"" Int
1 ManaString
"Jace, Ingenious Mind-Mage" ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop

    CardMatcher
-> (ManaString
    -> ExceptT
         ManaString
         (ReaderT Env (StateT Board (WriterT [Step] Identity)))
         ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forCards (Player -> CardMatcher
matchController Player
Active CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> CardMatcher
matchInPlay CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> [ManaString] -> CardMatcher
matchAttributes [ManaString
creature, ManaString
tapped]) ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
untap

  ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a. ManaString -> GameMonad a -> GameMonad a
step ManaString
"Cast Wildgrowth by tapping creaturs" (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
tapWithFreyalise ManaString
"G" ManaString
"Famished Paladin"
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
tapWithFreyalise ManaString
"G" ManaString
"Tenth District Veteran"

    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
cast ManaString
"1G" ManaString
"Wildgrowth Walker" ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop

    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
trigger ManaString
"Explore" ManaString
"Path of Discovery" ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop
    ManaString
-> ASetter Card Card Int Int
-> (Int -> Int)
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b.
ManaString
-> ASetter Card Card a b
-> (a -> b)
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
modifyCardDeprecated ManaString
"Wildgrowth Walker" ASetter Card Card Int Int
Lens' Card Int
cardPlusOneCounters (Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1)
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
trigger ManaString
"Gain life" ManaString
"Wildgrowth Walker" ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop
    Int
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
gainLife Int
3
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
trigger ManaString
"Untap" ManaString
"Famished Paladin" ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop
    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
untap ManaString
"Famished Paladin"

  ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a. ManaString -> GameMonad a -> GameMonad a
step ManaString
"Cast Branchwalker, floating mana from paladin untaps" (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
tapWithFreyalise ManaString
"G" ManaString
"Famished Paladin"
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
tapWithFreyalise ManaString
"G" ManaString
"Cacophodon"

    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
cast ManaString
"1G" ManaString
"Merfolk Branchwalker" ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop

    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
trigger ManaString
"Explore Path" ManaString
"Path of Discovery"
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
trigger ManaString
"Explore Brachwalker" ManaString
"Merfolk Branchwalker"

    ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop
    ManaString
-> ASetter Card Card Int Int
-> (Int -> Int)
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b.
ManaString
-> ASetter Card Card a b
-> (a -> b)
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
modifyCardDeprecated ManaString
"Merfolk Branchwalker" ASetter Card Card Int Int
Lens' Card Int
cardPlusOneCounters (Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1)
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
trigger ManaString
"Gain life" ManaString
"Wildgrowth Walker" ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop
    Int
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
gainLife Int
3
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
trigger ManaString
"Untap" ManaString
"Famished Paladin" ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop
    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
untap ManaString
"Famished Paladin"

    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
tapWithFreyalise ManaString
"G" ManaString
"Famished Paladin"

    ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop
    ManaString
-> ASetter Card Card Int Int
-> (Int -> Int)
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b.
ManaString
-> ASetter Card Card a b
-> (a -> b)
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
modifyCardDeprecated ManaString
"Merfolk Branchwalker" ASetter Card Card Int Int
Lens' Card Int
cardPlusOneCounters (Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1)
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
trigger ManaString
"Gain life" ManaString
"Wildgrowth Walker" ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop
    Int
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
gainLife Int
3
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
trigger ManaString
"Untap" ManaString
"Famished Paladin" ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop
    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
untap ManaString
"Famished Paladin"

    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
tapWithFreyalise ManaString
"G" ManaString
"Famished Paladin"

  ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a. ManaString -> GameMonad a -> GameMonad a
step ManaString
"Enter the Unknown on Tenth District Veteran" (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
cast ManaString
"G" ManaString
"Enter the Unknown" ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop
    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
target ManaString
"Tenth District Veteran"

    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
trigger ManaString
"Explore Path" ManaString
"Path of Discovery"

    ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop
    ManaString
-> ASetter Card Card Int Int
-> (Int -> Int)
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b.
ManaString
-> ASetter Card Card a b
-> (a -> b)
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
modifyCardDeprecated ManaString
"Tenth District Veteran" ASetter Card Card Int Int
Lens' Card Int
cardPlusOneCounters (Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1)
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
trigger ManaString
"Gain life" ManaString
"Wildgrowth Walker" ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop
    Int
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
gainLife Int
3
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
trigger ManaString
"Untap" ManaString
"Famished Paladin" ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop
    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
untap ManaString
"Famished Paladin"

  ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a. ManaString -> GameMonad a -> GameMonad a
step ManaString
"Use Vona to destroy Baird" (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
    ManaString
-> ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
activate ManaString
"Destroy" ManaString
"" ManaString
"Vona, Butcher of Magan"
    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
tap ManaString
"Vona, Butcher of Magan"
    Int
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
loseLife Int
7

    ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop

    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
target ManaString
"Baird, Steward of Argive"
    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
destroy ManaString
"Baird, Steward of Argive"

  ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a. ManaString -> GameMonad a -> GameMonad a
step ManaString
"Float mana from creatures and artifact, untap with Rallying Roar" (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
    CardMatcher
-> (ManaString
    -> ExceptT
         ManaString
         (ReaderT Env (StateT Board (WriterT [Step] Identity)))
         ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forCards (Player -> CardMatcher
matchController Player
Active CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> CardMatcher
matchInPlay CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher
matchAttribute ManaString
creature CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher
missingAttribute ManaString
tapped CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher
missingAttribute ManaString
summoned) (ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
tapWithFreyalise ManaString
"W")

    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
sacrifice ManaString
"Treasure"
    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
addMana ManaString
"1"

    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
cast ManaString
"2W" ManaString
"Rallying Roar" ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop

    CardMatcher
-> (ManaString
    -> ExceptT
         ManaString
         (ReaderT Env (StateT Board (WriterT [Step] Identity)))
         ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forCards (Player -> CardMatcher
matchController Player
Active CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> CardMatcher
matchInPlay CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher
matchAttribute ManaString
creature) ((Int, Int)
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
modifyStrength (Int
1, Int
1))
    CardMatcher
-> (ManaString
    -> ExceptT
         ManaString
         (ReaderT Env (StateT Board (WriterT [Step] Identity)))
         ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forCards (Player -> CardMatcher
matchController Player
Active CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> CardMatcher
matchInPlay CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> [ManaString] -> CardMatcher
matchAttributes [ManaString
creature, ManaString
tapped]) ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
untap

  ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a. ManaString -> GameMonad a -> GameMonad a
step ManaString
"Attack with all" (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
    [ManaString]
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
attackWith
      [ ManaString
"Famished Paladin"
      , ManaString
"Tenth District Veteran"
      , ManaString
"Vona, Butcher of Magan"
      , ManaString
"Cacophodon"
      ]

  ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a. ManaString -> GameMonad a -> GameMonad a
step ManaString
"Use Vona to destroy Ceratops in response to Tenth District Veteran trigger" (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
    ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
trigger ManaString
"Untap" ManaString
"Tenth District Veteran"

    ManaString
-> ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
activate ManaString
"Destroy" ManaString
"" ManaString
"Vona, Butcher of Magan"
    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
tap ManaString
"Vona, Butcher of Magan"
    Int
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
loseLife Int
7

    ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop

    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
target ManaString
"Imperial Ceratops"
    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
destroy ManaString
"Imperial Ceratops"


  ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a. ManaString -> GameMonad a -> GameMonad a
step ManaString
"Resolve veteran trigger, untap Vona" (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
resolve ManaString
"Untap"
    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
untap ManaString
"Vona, Butcher of Magan"

  ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a. ManaString -> GameMonad a -> GameMonad a
step ManaString
"Use Vona to destroy Everdawn Champion" (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
    ManaString
-> ManaString
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
activate ManaString
"Destroy" ManaString
"" ManaString
"Vona, Butcher of Magan"
    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
tap ManaString
"Vona, Butcher of Magan"
    Int
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
loseLife Int
7

    ExceptT
  ManaString
  (ReaderT Env (StateT Board (WriterT [Step] Identity)))
  ()
resolveTop

    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
target ManaString
"Everdawn Champion"
    ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
destroy ManaString
"Everdawn Champion"

    Int
-> Player
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
validateLife Int
1 Player
Active

  ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a. ManaString -> GameMonad a -> GameMonad a
step ManaString
"Combat damage for the win" (ExceptT
   ManaString
   (ReaderT Env (StateT Board (WriterT [Step] Identity)))
   ()
 -> ExceptT
      ManaString
      (ReaderT Env (StateT Board (WriterT [Step] Identity)))
      ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forall a b. (a -> b) -> a -> b
$ do
    CardMatcher
-> (ManaString
    -> ExceptT
         ManaString
         (ReaderT Env (StateT Board (WriterT [Step] Identity)))
         ())
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
forCards (ManaString -> CardMatcher
matchAttribute ManaString
attacking) ([ManaString]
-> ManaString
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
combatDamage [])
    Int
-> Player
-> ExceptT
     ManaString
     (ReaderT Env (StateT Board (WriterT [Step] Identity)))
     ()
validateLife Int
0 Player
Opponent

attributes :: Formatter
attributes = FormatMonad () -> Formatter
attributeFormatter (FormatMonad () -> Formatter) -> FormatMonad () -> Formatter
forall a b. (a -> b) -> a -> b
$ do
  ManaString -> GameMonad Int -> FormatMonad ()
forall a. Show a => ManaString -> GameMonad a -> FormatMonad ()
attribute ManaString
"op. life" (GameMonad Int -> FormatMonad ())
-> GameMonad Int -> FormatMonad ()
forall a b. (a -> b) -> a -> b
$ Player -> GameMonad Int
countLife Player
Opponent
  ManaString -> GameMonad Int -> FormatMonad ()
forall a. Show a => ManaString -> GameMonad a -> FormatMonad ()
attribute ManaString
"our life" (GameMonad Int -> FormatMonad ())
-> GameMonad Int -> FormatMonad ()
forall a b. (a -> b) -> a -> b
$ Player -> GameMonad Int
countLife Player
Active
  ManaString -> GameMonad Int -> FormatMonad ()
forall a. Show a => ManaString -> GameMonad a -> FormatMonad ()
attribute ManaString
"pool" (GameMonad Int -> FormatMonad ())
-> GameMonad Int -> FormatMonad ()
forall a b. (a -> b) -> a -> b
$ Player -> GameMonad Int
countManaPool Player
Active

formatter :: Step -> Formatter
formatter Step
step = Formatter
attributes Formatter -> Formatter -> Formatter
forall a. Semigroup a => a -> a -> a
<> case Getting Int Step Int -> Step -> Int
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting Int Step Int
Lens' Step Int
stepNumber Step
step of
  Int
1  -> Formatter
boardFormatter
  Int
4  -> ManaString -> CardMatcher -> Formatter
cardFormatter ManaString
"defending" (CardMatcher
matchInPlay CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> Player -> CardMatcher
matchController Player
Opponent)
  Int
5  -> ManaString -> CardMatcher -> Formatter
cardFormatter ManaString
"defending" (CardMatcher
matchInPlay CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> Player -> CardMatcher
matchController Player
Opponent)
  Int
10 -> ManaString -> CardMatcher -> Formatter
cardFormatter ManaString
"defending" (CardMatcher
matchInPlay CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> Player -> CardMatcher
matchController Player
Opponent)
  Int
12 -> ManaString -> CardMatcher -> Formatter
cardFormatter ManaString
"attacking" (ManaString -> CardMatcher
matchAttribute ManaString
attacking)
  Int
13 -> ManaString -> CardMatcher -> Formatter
cardFormatter ManaString
"defending" (CardMatcher
matchInPlay CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> Player -> CardMatcher
matchController Player
Opponent)
  Int
15 -> ManaString -> CardMatcher -> Formatter
cardFormatter ManaString
"defending" (CardMatcher
matchInPlay CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> Player -> CardMatcher
matchController Player
Opponent)
  Int
_ -> Formatter
forall a. Monoid a => a
mempty