module Solutions.UltimateMasters where
import Control.Lens (over, view)
import Control.Monad
import Dovin.V2
sacrificeToAltar :: ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
sacrificeToAltar ManaString
mana ManaString
name = do
ManaString
-> ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
activate ManaString
"" ManaString
"" ManaString
"Phrexian Altar" 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)))
()
sacrifice ManaString
name
ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
addMana ManaString
mana
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
20
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)))
()
addInstant ManaString
"Through the Breach"
ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
withAttribute ManaString
arcane (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)))
()
addInstant ManaString
"Goryo's Vengeance"
ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
addSorcery ManaString
"Reanimate"
ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
addSorcery ManaString
"Vengeful Rebirth"
(Int, Int)
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
addCreature (Int
2, Int
5) ManaString
"Stingerfling Spider"
(Int, Int)
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
addCreature (Int
15, Int
15) ManaString
"Emrakul, the Aeons Torn"
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
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
addPlaneswalker Int
3 ManaString
"Liliana of the Veil"
ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
addArtifact ManaString
"Phrexian Altar"
ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
addArtifact ManaString
"Engineered Explosives"
Int
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
addLands Int
6 ManaString
"Swamp"
Int
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
addLands Int
6 ManaString
"Mountain"
ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
withAttribute ManaString
haste
(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)))
()
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
withPlusOneCounters Int
1
(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, Int)
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
addCreature (Int
4, Int
3) ManaString
"Vengevine"
ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
withAttribute ManaString
legendary
(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
$ CardMatcher
-> (Card -> CardMatcher)
-> (Card -> Identity Card)
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
withEffect
CardMatcher
matchInPlay
(Card -> CardMatcher
matchOtherCreatures (Card -> CardMatcher)
-> (Card -> CardMatcher) -> Card -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> (CardMatcher -> Card -> CardMatcher
forall a b. a -> b -> a
const (CardMatcher -> Card -> CardMatcher)
-> CardMatcher -> Card -> CardMatcher
forall a b. (a -> b) -> a -> b
$ [ManaString] -> CardMatcher
matchAttributes [ManaString
creature]))
(Card -> Identity Card
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Card -> Identity Card) -> (Card -> Card) -> Card -> Identity Card
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ASetter Card Card CardStrength CardStrength
-> (CardStrength -> CardStrength) -> Card -> Card
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
over ASetter Card Card CardStrength CardStrength
Lens' Card CardStrength
cardStrength ((Int, Int) -> CardStrength
mkStrength (Int
1, Int
1) CardStrength -> CardStrength -> CardStrength
forall a. Semigroup a => a -> a -> a
<>) (Card -> Card) -> (Card -> Card) -> Card -> Card
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ManaString -> Card -> Card
setAttribute ManaString
undying)
(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, Int)
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
addCreature (Int
5, Int
5) ManaString
"Mikaeus, the Unhallowed"
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
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
addLands Int
7 ManaString
"Plains"
Int
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
addLands Int
2 ManaString
"Forest"
ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
addLand ManaString
"Dark Depths"
ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
withAttribute ManaString
flying (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
6) ManaString
"Reya Dawnbringer"
(Int, Int)
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
addCreature (Int
4, Int
3) ManaString
"Sublime Archangel"
ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
withAttribute ManaString
legendary
(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, Int)
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
addCreature (Int
5, Int
5) ManaString
"Sigarda, Host of Herons"
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)))
()
addEnchantment ManaString
"Bridge from Below"
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
"Sac Vengevine and Reanimate with the created mana, exiling Bridge" (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)))
()
sacrificeToAltar ManaString
"B" ManaString
"Vengevine"
ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
exile ManaString
"Bridge from Below"
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
cast ManaString
"B" ManaString
"Reanimate" 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
CardLocation
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
targetInLocation (Player
Active, Location
Graveyard) ManaString
"Vengevine"
Location
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
moveTo Location
Play ManaString
"Vengevine"
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
"Sac Vengevine (undying) then Mikaeus for mana" (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)))
()
sacrificeToAltar ManaString
"U" ManaString
"Vengevine"
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
sacrificeToAltar ManaString
"U" ManaString
"Mikaeus, the Unhallowed"
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
"Engineered Explosives for Sigarda" (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
"" ManaString
"2" ManaString
"Engineered Explosives" 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)))
()
destroy ManaString
"Sigarda, Host of Herons"
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
"Goryo's Mikaeus with spliced Breach of Stingerfling, destroying Archangel" (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
"B" ManaString
"Swamp 1"
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
tapForMana ManaString
"B" ManaString
"Swamp 2"
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
tapForMana ManaString
"R" ManaString
"Mountain 1"
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
tapForMana ManaString
"R" ManaString
"Mountain 2"
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
tapForMana ManaString
"R" ManaString
"Mountain 3"
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
tapForMana ManaString
"R" ManaString
"Mountain 4"
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
cast ManaString
"1B" ManaString
"Goryo's Vengeance"
ManaString
-> ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
splice ManaString
"Goryo's Vengeance" ManaString
"2RR" ManaString
"Through the Breach"
ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
resolveTop
ManaString
-> (ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
())
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
with ManaString
"Mikaeus, the Unhallowed" ((ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
())
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
())
-> (ManaString
-> 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
cn -> do
CardLocation
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
targetInLocation (Player
Active, Location
Graveyard) ManaString
cn
CardMatcher
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
validate (ManaString -> CardMatcher
matchAttribute ManaString
legendary) ManaString
cn
Location
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
moveTo Location
Play ManaString
cn
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
gainAttribute ManaString
haste ManaString
cn
ManaString
-> (ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
())
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
with ManaString
"Stingerfling Spider" ((ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
())
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
())
-> (ManaString
-> 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
cn -> do
CardLocation
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
targetInLocation (Player
Active, Location
Hand) ManaString
cn
Location
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
moveTo Location
Play ManaString
cn
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
gainAttribute ManaString
haste ManaString
cn
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
trigger ManaString
"Destroy creature with flying" ManaString
cn 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
"Sublime Archangel"
CardMatcher
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
validate (ManaString -> CardMatcher
matchAttribute ManaString
flying) ManaString
"Sublime Archangel"
ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
destroy ManaString
"Sublime Archangel"
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
"Liliana to force sac of Reya" (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
"Liliana of the Veil" 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
$ do
ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
sacrifice ManaString
"Reya Dawnbringer"
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
"Breach Emrakul" (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
"B" ManaString
"Swamp 3"
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
tapForMana ManaString
"B" ManaString
"Swamp 4"
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
tapForMana ManaString
"B" ManaString
"Swamp 5"
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
tapForMana ManaString
"R" ManaString
"Mountain 5"
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
tapForMana ManaString
"R" ManaString
"Mountain 6"
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
cast ManaString
"4R" ManaString
"Through the Breach" 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)))
())
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
with ManaString
"Emrakul, the Aeons Torn" ((ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
())
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
())
-> (ManaString
-> 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
cn -> do
CardLocation
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
targetInLocation (Player
Active, Location
Hand) ManaString
cn
Location
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
moveTo Location
Play ManaString
cn
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
gainAttribute ManaString
haste ManaString
cn
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 everything" (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
"Emrakul, the Aeons Torn"
, ManaString
"Mikaeus, the Unhallowed"
, ManaString
"Vengevine"
, ManaString
"Stingerfling Spider"
]
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
"Assume opponent activates Dark Depths to block Emrakul in response to Annihilator trigger, then annihilates lands" (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
"Annihilator 6" ManaString
"Emrakul, the Aeons Torn"
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
[Int]
-> (Int
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
())
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ [Int
1..Int
7] ((Int
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
())
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
())
-> (Int
-> 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
n -> ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
tapForMana ManaString
"W" (Int -> ManaString -> ManaString
numbered Int
n ManaString
"Plains")
[Int]
-> (Int
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
())
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ [Int
1..Int
2] ((Int
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
())
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
())
-> (Int
-> 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
n -> ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
tapForMana ManaString
"G" (Int -> ManaString -> ManaString
numbered Int
n ManaString
"Forest")
ManaString
-> ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
activate ManaString
"" ManaString
"3" ManaString
"Dark Depths" 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
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
activate ManaString
"" ManaString
"3" ManaString
"Dark Depths" 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
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
activate ManaString
"" ManaString
"3" ManaString
"Dark Depths" 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)))
()
sacrifice ManaString
"Dark Depths"
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)))
()
withAttributes [ManaString
indestructible, ManaString
flying, 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
$ (Int, Int)
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
addCreature (Int
20, Int
20) ManaString
"Marit Large"
ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
resolve ManaString
"Annihilator 6"
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]
-> (Int
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
())
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ [Int
1..Int
6] ((Int
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
())
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
())
-> (Int
-> 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
n -> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
sacrifice (Int -> ManaString -> ManaString
numbered Int
n ManaString
"Plains")
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
gainAttribute ManaString
"blocked" ManaString
"Emrakul, the Aeons Torn"
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
"Deal damage. Emrakul returns with undying" (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
(CardLocation -> CardMatcher
matchLocation (Player
Active, Location
Play) CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher
matchAttribute ManaString
attacking CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher
missingAttribute ManaString
"blocked")
([ManaString]
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
combatDamage [])
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
fight ManaString
"Emrakul, the Aeons Torn" ManaString
"Marit Large"
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
"In second main, sacrifice remaining creatures for mana (spider twice)" (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
Phase
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
transitionTo Phase
SecondMain
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
sacrificeToAltar ManaString
"R" ManaString
"Vengevine"
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
sacrificeToAltar ManaString
"G" ManaString
"Stingerfling Spider"
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
sacrificeToAltar ManaString
"U" ManaString
"Stingerfling Spider"
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
sacrificeToAltar ManaString
"U" ManaString
"Emrakul, the Aeons Torn"
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
sacrificeToAltar ManaString
"U" ManaString
"Mikaeus, the Unhallowed"
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 Vengeful Rebirth on Mikaeus, targeting 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
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
tapForMana ManaString
"B" ManaString
"Swamp 6"
ManaString
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
cast ManaString
"4GR" ManaString
"Vengeful Rebirth" 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
CardLocation
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
targetInLocation (Player
Active, Location
Graveyard) ManaString
"Mikaeus, the Unhallowed"
Location
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
moveTo Location
Hand ManaString
"Mikaeus, the Unhallowed"
(Card -> Int)
-> Target
-> ManaString
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
damage (Int -> Card -> Int
forall a b. a -> b -> a
const Int
6) (Player -> Target
targetPlayer Player
Opponent) ManaString
"Vengeful Rebirth"
Int
-> Player
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
()
validateLife Int
0 Player
Opponent
manaAttribute :: Formatter
manaAttribute = FormatMonad () -> Formatter
attributeFormatter (FormatMonad () -> Formatter) -> FormatMonad () -> Formatter
forall a b. (a -> b) -> a -> b
$ ManaString -> GameMonad Int -> FormatMonad ()
forall a. Show a => ManaString -> GameMonad a -> FormatMonad ()
attribute ManaString
"mana" (GameMonad Int -> FormatMonad ())
-> GameMonad Int -> FormatMonad ()
forall a b. (a -> b) -> a -> b
$
Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) (Int -> Int -> Int)
-> GameMonad Int
-> ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
(Int -> Int)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> CardMatcher -> GameMonad Int
countCards
( ManaString -> CardMatcher
matchAttribute ManaString
"land"
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
<> Player -> CardMatcher
matchController Player
Active
)
ExceptT
ManaString
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
(Int -> Int)
-> GameMonad Int -> GameMonad Int
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Player -> GameMonad Int
countManaPool Player
Active
formatter :: Step -> Formatter
formatter = Int -> Formatter
forall a. (Eq a, Num a) => a -> Formatter
oldFormatter (Int -> Formatter) -> (Step -> Int) -> Step -> Formatter
forall b c a. (b -> c) -> (a -> b) -> a -> c
. 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
oldFormatter :: a -> Formatter
oldFormatter a
1 = Formatter
boardFormatter
oldFormatter a
3 = Formatter
manaAttribute
Formatter -> Formatter -> Formatter
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher -> Formatter
cardFormatter
ManaString
"creatures"
(CardLocation -> CardMatcher
matchLocation (Player
Active, Location
Play) CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher
matchAttribute ManaString
creature)
Formatter -> Formatter -> Formatter
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher -> Formatter
cardFormatter
ManaString
"graveyard"
(CardLocation -> CardMatcher
matchLocation (Player
Active, Location
Graveyard) CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher
matchAttribute ManaString
creature)
oldFormatter a
4 = Formatter
manaAttribute
Formatter -> Formatter -> Formatter
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher -> Formatter
cardFormatter
ManaString
"remaining creatures"
(CardLocation -> CardMatcher
matchLocation (Player
Opponent, Location
Play) CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher
matchAttribute ManaString
creature)
oldFormatter a
5 = Formatter
manaAttribute
Formatter -> Formatter -> Formatter
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher -> Formatter
cardFormatter
ManaString
"remaining creatures"
(CardLocation -> CardMatcher
matchLocation (Player
Opponent, Location
Play) CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher
matchAttribute ManaString
creature)
oldFormatter a
6 = Formatter
manaAttribute
Formatter -> Formatter -> Formatter
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher -> Formatter
cardFormatter
ManaString
"remaining creatures"
(CardLocation -> CardMatcher
matchLocation (Player
Opponent, Location
Play) CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher
matchAttribute ManaString
creature)
oldFormatter a
8 =
ManaString -> CardMatcher -> Formatter
cardFormatter
ManaString
"creatures"
(CardLocation -> CardMatcher
matchLocation (Player
Active, Location
Play) CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher
matchAttribute ManaString
creature)
oldFormatter a
9 =
ManaString -> CardMatcher -> Formatter
cardFormatter
ManaString
"unblocked creatures"
(CardLocation -> CardMatcher
matchLocation (Player
Active, Location
Play)
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
<> CardMatcher -> CardMatcher
invert (ManaString -> CardMatcher
matchAttribute ManaString
"blocked")
)
oldFormatter a
10 =
FormatMonad () -> Formatter
attributeFormatter (ManaString -> GameMonad Int -> FormatMonad ()
forall a. Show a => ManaString -> GameMonad a -> FormatMonad ()
attribute ManaString
"life" (Player -> GameMonad Int
countLife Player
Opponent))
Formatter -> Formatter -> Formatter
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher -> Formatter
cardFormatter
ManaString
"creatures"
(CardLocation -> CardMatcher
matchLocation (Player
Active, Location
Play) CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> ManaString -> CardMatcher
matchAttribute ManaString
creature)
oldFormatter a
11 = Formatter
manaAttribute
Formatter -> Formatter -> Formatter
forall a. Semigroup a => a -> a -> a
<> FormatMonad () -> Formatter
attributeFormatter (ManaString -> GameMonad Int -> FormatMonad ()
forall a. Show a => ManaString -> GameMonad a -> FormatMonad ()
attribute ManaString
"life" (Player -> GameMonad Int
countLife Player
Opponent))
oldFormatter a
12 = Formatter
manaAttribute
Formatter -> Formatter -> Formatter
forall a. Semigroup a => a -> a -> a
<> FormatMonad () -> Formatter
attributeFormatter (ManaString -> GameMonad Int -> FormatMonad ()
forall a. Show a => ManaString -> GameMonad a -> FormatMonad ()
attribute ManaString
"life" (Player -> GameMonad Int
countLife Player
Opponent))
oldFormatter a
_ = Formatter
manaAttribute