I still don't understand why the handler needs to be returned.  Presumably an implementation of `delegate` would store the handler itself for later removal and if you're calling `delegate` manually you already have a reference.  When would this return value be used?