refactor ADT type