make Write lazy to support recursive definition