t4t 0.2.1

Tit-for-tat: a game theory toolbox.
Documentation
use crate::{Distribution, Payoff, PlayerIndex};
use std::sync::Arc;

type Edge<M, U, const P: usize> = (M, Arc<Extensive<M, U, P>>);

// A game represented in [extensive form](https://en.wikipedia.org/wiki/Extensive-form_game).
pub enum Extensive<M, U, const P: usize> {
    Turn {
        to_move: PlayerIndex<P>,
        next: Vec<Edge<M, U, P>>,
    },
    Chance(Distribution<Edge<M, U, P>>),
    End(Payoff<U, P>),
}

/// An [information set](https://en.wikipedia.org/wiki/Information_set_(game_theory)) in an
/// imperfect information [extensive-form game](https://en.wikipedia.org/wiki/Extensive-form_game).
pub struct InformationSet<M, const P: usize> {
    id: usize,
    player: PlayerIndex<P>,
    available_moves: Vec<M>,
}