better assign impl