libspecr 0.1.41

standard library for specr lang
Documentation
use crate::*;

use im::Vector as IMVector;
use im::vector::ConsumingIter;

impl<T: Obj> List<T> {
    /// An ordered iterator over all elements of `List`.
    pub fn iter(&self) -> ConsumingIter<T> {
        self.into_iter()
    }
}

impl<T: Obj> IntoIterator for List<T> {
    type Item = T;
    type IntoIter = ConsumingIter<T>;

    fn into_iter(self) -> Self::IntoIter {
        self.0.call_ref_unchecked(|v| v.clone().into_iter())
    }
}

impl<A: Obj> FromIterator<A> for List<A> {
    fn from_iter<T>(iter: T) -> Self where T: IntoIterator<Item = A> {
        let v: IMVector<A> = iter.into_iter().collect();
        List(GcCow::new(v))
    }
}