make Option::and fully polymorphic