use crate::kind::*;
use crate::ops::constructor::*;
use crate::ops::cardinality::*;
pub mod ordering {
pub struct Back;
pub struct Front;
}
pub trait Push<Order> : Collection {
fn push(&mut self, value: Self::Item);
}
pub trait Pop<Order> : Collection {
fn pop(&mut self) -> Option<Self::Item>;
}
pub trait Sequence<OrderPush, OrderPop> :
Push<OrderPush>
+ Pop<OrderPop>
+ Cardinality
+ Empty
{}
impl<R, OrderPush, OrderPop> Sequence<OrderPush, OrderPop> for R where
R: Push<OrderPush>,
R: Pop<OrderPop>,
R: Cardinality,
R: Empty
{}