actually, ArrayLike is not needed