procedure convert ( from : in set'class; to : out set'class) is temp : set'class := from; elem : set_element; begin -- convert to := empty; while temp /= empty loop take( from => temp, element => elem); -- gnat bug here-not knowing how to dispatch the unit routine to:=union( left => to, right => abstract_set_handling.unit(element => elem)); end loop; end convert;