module datatypes pub struct Stack<T> { mut: elements []T } // is_empty checks if the stack is empty pub fn (stack Stack<T>) is_empty() bool { return stack.elements.len == 0 } // len returns the length of the stack pub fn (stack Stack<T>) len() int { return stack.elements.len } // peek returns the top of the stack pub fn (stack Stack<T>) peek() ?T { return if !stack.is_empty() { stack.elements.last() } else { error('Stack is empty') } } // push adds an element to the top of the stack pub fn (mut stack Stack<T>) push(item T) { stack.elements << item } // pop removes the element at the top of the stack and returns it pub fn (mut stack Stack<T>) pop() ?T { return if !stack.is_empty() { stack.elements.pop() } else { error('Stack is empty') } } // str returns a string representation of the stack pub fn (stack Stack<T>) str() string { return stack.elements.str() }