rust_fp_pfds/
stack.rs

1use std::rc::Rc;
2
3#[derive(Debug)]
4pub enum StackError {
5    NoSuchElementError,
6    IndexOutOfRangeError,
7    RcUnwrapError,
8}
9
10pub trait Stack<A> {
11    fn cons(self, value: A) -> Self;
12    fn head(&self) -> Result<&A, StackError>;
13    fn tail(&self) -> Rc<Self>;
14    fn size(&self) -> usize;
15    fn update(self, index: u32, new_value: A) -> Result<Self, StackError>
16    where
17        Self: Sized;
18    fn get(&self, i: u32) -> Result<&A, StackError>;
19}