(* Code of Figure 9.15, page 384 from Kenneth C. Louden, Programming Languages Principles and Practice 2nd Edition Copyright (C) Brooks-Cole/ITP, 2003 (Test code from page 384 added, too.) *) structure Queue2: QUEUE = struct datatype 'a Queue = Createq | Enqueue of 'a Queue * 'a ; val createq = Createq; fun enqueue(q,elem) = Enqueue (q,elem); fun frontq (Enqueue(Createq,elem)) = elem | frontq (Enqueue(q,elem)) = frontq q; fun dequeue (Enqueue(Createq,elem)) = Createq | dequeue (Enqueue(q,elem)) = Enqueue(dequeue q, elem); fun emptyq Createq = true | emptyq _ = false; end; open Queue2; val q = enqueue(createq,3); frontq q; val q1 = dequeue q; emptyq q1;