GENERIC DEFINITION MODULE GStack (T : TYPE); (* A generic linked stack over a type parameter T. Instantiated as IntStack = GStack(INTEGER) and CharStack = GStack(CHAR). *) TYPE Node = POINTER TO NodeRec; NodeRec = RECORD val : T; next : Node; END; Stack = RECORD top : Node; depth : INTEGER; END; PROCEDURE Init(VAR s : Stack); PROCEDURE Push(VAR s : Stack; v : T); PROCEDURE Pop(VAR s : Stack; VAR v : T) : BOOLEAN; PROCEDURE Depth(VAR s : Stack) : INTEGER; END GStack.