declare fun {NewQueue} Given GivePort={NewPort Given} Taken TakePort={NewPort Taken} proc {Match Xs Ys} case Xs # Ys of (X|Xr) # (Y|Yr) then X=Y {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