implemented the new type classes for the option ADT