switched to full pseudo inheritance pattern with ADTs to give every effects a status