meiosis 0.1.0

An evolutionary algorithm library with as many compile time checks as possible.
Documentation
/// A population is a set amount of [Genotype]s that are being evaluated, selected, recombined and
/// mutated, to then produce a new population.
#[derive(Debug, Clone)]
#[non_exhaustive]
pub struct Population<GENOTYPE> {
    /// Members are stored in an arbitrary order.
    pub members: Vec<GENOTYPE>,
}

/// [Genotype]s have been converted into [Phenotype]s and been evaluated.
#[derive(Debug, Clone, PartialEq)]
#[allow(clippy::module_name_repetitions)]
#[non_exhaustive]
pub struct EvaluatedPopulation<PHENOTYPE> {
    /// Evaluated members are stored in an arbitrary order.
    pub members: Vec<Evaluated<PHENOTYPE>>,
}

/// MISSING DOCS
#[derive(Debug, Clone, PartialEq)]
#[non_exhaustive]
pub struct Evaluated<PHENOTYPE> {
    /// MISSING DOCS
    pub phenotype: PHENOTYPE,
    /// MISSING DOCS
    pub fitness: f64,
    /// MISSING DOCS
    /// # Note
    /// If speciation is turned off, this value is not set and ignored.
    pub adjusted_fitness: f64,
}

/// MISSING DOCS
#[derive(Debug)]
#[non_exhaustive]
pub struct Species<GENOTYPE> {
    /// MISSING DOCS
    pub identifier: (usize, usize),
    /// MISSING DOCS
    pub representative: GENOTYPE,
    /// MISSING DOCS
    pub population: Population<GENOTYPE>,
}

/// MISSING DOCS
#[derive(Debug, PartialEq)]
#[non_exhaustive]
#[allow(clippy::module_name_repetitions)] // TODO: fix this
pub struct EvaluatedSpecies<PHENOTYPE> {
    /// MISSING DOCS
    pub identifier: (usize, usize),
    /// MISSING DOCS
    pub sum_adjusted_fitness: f64,
    /// MISSING DOCS
    pub population: EvaluatedPopulation<PHENOTYPE>,
}

/// MISSING DOCS
#[derive(Debug)]
#[non_exhaustive]
pub struct Parents<PHENOTYPE> {
    /// MISSING DOCS
    pub identifier: (usize, usize),
    /// MISSING DOCS
    pub max_size: usize,
    /// MISSING DOCS
    pub representative: PHENOTYPE,
    /// MISSING DOCS
    pub population: EvaluatedPopulation<PHENOTYPE>,
}

/// MISSING DOCS
#[derive(Debug)]
#[non_exhaustive]
pub struct Bare<GENOTYPE> {
    /// MISSING DOCS
    pub identifier: (usize, usize),
    /// MISSING DOCS
    pub max_size: usize,
    /// MISSING DOCS
    pub representative: GENOTYPE,
}