;; -*- Mode: Irken -*-

(define (stack-class)
  (define (push self x)
    (set! self.s (list:cons x self.s)))
  (define (pop self)
    (match self.s with
      () -> (error "stack underflow")
      (hd . tl) -> (let ((result hd))
		     (set! self.s tl)
		     result)))
  (define (get self) self.s)
  (define (len self) (length self.s))
  (let ((methods {push=push pop=pop get=get len=len}))
    (lambda ()
      {s='() o=methods}))
  )

(define new-stack (stack-class))