functor redux