structure Queue2:QueueSig = struct exception Deq type Item = int abstype Queue = Q of (Item list * Item list) with val empty = Q ([], []) fun isEmpty(Q ([], []))= true | isEmpty _ = false fun enq(Q(inp, out), e) = Q(e :: inp, out) fun deq(Q(inp, h :: t)) = (Q(inp, t), h) | deq(Q([], [])) = raise Deq | deq(Q(inp, [])) = deq(Q([], rev inp)) end end;