begin to define Functor.