pub opaque type End
pub opaque type Stack(a)
pub fn get(stack: Stack(#(a, b))) -> b
pub fn new() -> Stack(End)
pub fn pop(stack: Stack(#(a, b))) -> Stack(a)
pub fn push(stack: Stack(a), next: b) -> Stack(#(a, b))
pub fn size(stack: Stack(a)) -> Int