# HG changeset patch # User wenzelm # Date 1126642793 -7200 # Node ID e02adca07c31c3107220ce8dafd1e7f4cb2214c4 # Parent 44518c82100afa3eede3e72cda1595c93e2def1c Non-empty stacks. diff -r 44518c82100a -r e02adca07c31 src/Pure/General/stack.ML --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/Pure/General/stack.ML Tue Sep 13 22:19:53 2005 +0200 @@ -0,0 +1,37 @@ +(* Title: Pure/General/stack.ML + ID: $Id$ + Author: Makarius + +Non-empty stacks. +*) + +signature STACK = +sig + type 'a T = 'a * 'a list + val level: 'a T -> int + val init: 'a -> 'a T + val top: 'a T -> 'a + val map: ('a -> 'a) -> 'a T -> 'a T + val push: 'a T -> 'a T + val pop: 'a T -> 'a T (*exception Empty*) +end; + +structure Stack: STACK = +struct + +type 'a T = 'a * 'a list; + +fun level (_, xs) = length xs; + +fun init x = (x, []); + +fun top (x, _) = x; + +fun map f (x, xs) = (f x, xs); + +fun push (x, xs) = (x, x :: xs); + +fun pop (_, x :: xs) = (x, xs) + | pop (_, []) = raise Empty; + +end;