abstype 'elem stack = Empty | Body of 'elem list with exception EmptyStack; val newStack = Empty; (* Initializer *) fun isEmpty(Empty) = true | isEmpty(Body(s)) = false; fun push(Empty, e) = Body[e] | (* Constructor *) push(Body(s), e) = Body(e::s); fun pop(Empty) = Empty | (* Destructor *) pop(Body(nil)) = Empty | pop(Body(e::nil)) = Empty | pop(Body(e::es)) = Body(es); fun top(Empty) = raise EmptyStack | (* Selector *) top(Body(s)) = hd(s); end;