add Functor