cons_cell 0.1.0

Swiss knife for heterogenous containers
Documentation
use crate::cons::{Cons, ConsCell, Nil};
use std::ops::Add;
use typenum::{U0, U1, Unsigned};

pub trait Length: ConsCell {
    type Len: Unsigned;

    fn len(&self) -> usize {
        Self::Len::to_usize()
    }
}

impl<C: Cons> Length for C
where
    <C as Cons>::Tail: Length,
    <<C as Cons>::Tail as Length>::Len: Add<U1>,
    <<<C as Cons>::Tail as Length>::Len as Add<U1>>::Output: Unsigned,
{
    type Len = <<<C as Cons>::Tail as Length>::Len as Add<U1>>::Output;
}

impl<NilSeed> Length for Nil<NilSeed> {
    type Len = U0;
}