extending Functor trait