class Stack[T] { private var items = List[T]() def isEmpty = items.isEmpty def peek = items match { case List() => error("Stack empty") case head :: rest => head } def pop = items match { case List() => error("Stack empty") case head :: rest => items = rest; head } def push(value: T) = items = value +: items }