Designing and Implementing an ADT