grim :: Player Dilemma
grim = "Grim Trigger" :::
    do ms <- his `each` completedGames' onlyMove
       play (if D `elem` ms then D else C)

-- | The Grim Trigger, implemented using state.  Much faster than 'grim', since
--   it doesn't examine every previous game iteration.
grim :: Player Dilemma
grim = "Grim Trigger" :::
    do ms <- his `each` completedGames' onlyMove
       play (if D `elem` ms then D else C)

-- | The Grim Trigger, implemented using state.  Much faster than 'grim', since
--   it doesn't examine every previous game iteration.
grim = "Grim Trigger" :::
    do ms <- his `each` completedGames' onlyMove
       play (if D `elem` ms then D else C)

-- | The Grim Trigger, implemented using state.  Much faster than 'grim', since
--   it doesn't examine every previous game iteration.