type in functor implementation was too specific, therefore the wrong function was being dispatched