Functors
You can parameterize structures by other structures
Then instantiate the functors to build regular structures
functor QueueUser(Q:QUEUE) =struct … Q.enq … Q.deq …
This only knows the aspects of Q that are defined by QUEUE
structure QU1 = QueueUser(Queue1);
structure QU2 = QueueUser(Queue3);