Design a structure stack that represents a stack of elements of some arbitrary type. Include the functions: create(returns an empty stack), push(add an element to the top of the stack and return the resulting stack), pop(delete the top element and return the resulting stack), isEmpty (test whether a given stack is empty), and top (return the top element). Also include an exception EmptyStack to catch attempts to read or pop the top element of an empty stack.
Also design a suitable signature that will allow us to create from the stack a structure StringStack whose stacks have elements that are strings, and that omits the operation top.