declare fun {NewQueue} ... fun {Size} lock L then @C.1 end end fun {DeleteAll} lock L then X q(_ S E)=@C in C:=q(0 X X) E=nil S end end fun {DeleteNonBlock} lock L then if {Size}>0 then [{Delete}] else nil end end end in queue(insert:Insert delete:Delete size:Size deleteAll:DeleteAll deleteNonBlock:DeleteNonBlock) end