reimplementation tuple class