todo about functor