% $Id: NewQueue.oz,v 1.3 2007/11/14 01:49:53 leavens Exp leavens $ declare fun {NewQueue} Given GivePort={NewPort Given} Taken TakePort={NewPort Taken} proc {Match Xs Ys} case Xs # Ys of (X|Xr) # (Y|Yr) then thread X=Y end {Match Xr Yr} [] nil # nil then skip end end in thread {Match Given Taken} end queue(put:proc {$ X} {Send GivePort X} end get:proc {$ ?X} {Send TakePort X} end) end