(* Code of Figure 9.1, page 364 from Kenneth C. Louden, Programming Languages Principles and Practice 2nd Edition Copyright (C) Brooks-Cole/ITP, 2003 (Test code from page 365 added, too.) *) abstype 'element Queue = Q of 'element list with val createq = Q []; fun enqueue (Q lis, elem) = Q (lis @ [elem]); fun dequeue (Q lis) = Q (tl lis); fun frontq (Q lis) = hd lis; fun emptyq (Q []) = true | emptyq (Q (h::t)) = false; end; val q = enqueue(createq,3); val q2 = enqueue(q,4); frontq q2; val q3 = dequeue q2; frontq q3;