Removed Enum instance, because it's impossible to give an efficient one for an arbitrary Functor.