;; -*- 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))