functor value_type ==> result_type (tested)