abstype 'a Queue = Q of 'a list * 'a list with val empty = Q([],[]) ; fun null( Q([],[]) ) = true | null _ = false ; fun enq x ( Q([],_) ) = Q( [x] , [] ) | enq x ( Q(front,back) ) = Q( front , x::back ) ; fun deq( Q(_::[],back) ) = Q( rev back , [] ) | deq( Q(_::rest,back) ) = Q( rest , back ) | deq( _ ) = empty ; fun hd( Q(head::rest,_) ) = SOME head | hd( Q([],_) ) = NONE ; end ; enq 0 empty; enq 1 it; deq it ; hd it; enq 0 empty; enq 1 it; deq it ; deq it ; hd it ;