///|
priv struct Stack[T] {
  mut top : T
  mut stack : @list.List[T]
}

///|
fn[T] push(self : Stack[T], t : T) -> Unit {
  self.stack = self.stack.add(self.top)
  self.top = t
}