This code is heavily based off Carey's canonical solution to project 1. Was unable to fully complete polymorphism.