Interesting functor API. Should probably be documented as a new concept.