Register a filter function with this :class:`~.Filters` instance.
        This function is curried with :class:`~okcupyd.util.currying.curry`
        -- that is, it can be invoked partially before it is fully evaluated.
        This allows us to pass kwargs to this function when it is used as a
        decorator:

        .. code-block:: python

            @register_filter_builder(keys=('real_name',),
                                     decider=Filters.any_decider)
            def my_filter_function(argument):
                return '4,{0}'.format(argument)

        :param function: The filter function to register.
        :param keys: Keys that should be used as the argument names for
                     `function`, if none are provided, the filter functions
                     argument names will be used instead.
        :param decider: a function of signature
                        `(function, incoming_keys, accepted_keys)` that returns
                        True if the filter function should be called and False
                        otherwise. Defaults to
                        :meth:`~.all_not_none_decider`
        :param acceptable_values: A list of acceptable values for the parameter
                                  of the filter function (or a list of lists if
                                  the filter function takes multiple parameters)
        :param types: The type of the parameter accepted by the incoming filter
                      function (or a list of types if the function takes
                      multiple parameters)
        :param descriptions: A description for the incoming filter function's
                             argument (or a list of descriptions if the filter
                             function takes multiple arguments)
        :param output_key: The key to use to output the provided value. Will
                           default to the only value in keys if keys has
                           length 1.

def register_filter_builder(self, function, **kwargs):
        """Register a filter function with this :class:`~.Filters` instance.
        This function is curried with :class:`~okcupyd.util.currying.curry`
        -- that is, it can be invoked partially before it is fully evaluated.
        This allows us to pass kwargs to this function when it is used as a
        decorator:

        .. code-block:: python

            @register_filter_builder(keys=('real_name',),
                                     decider=Filters.any_decider)
            def my_filter_function(argument):
                return '4,{0}'.format(argument)

        :param function: The filter function to register.
        :param keys: Keys that should be used as the argument names for
                     `function`, if none are provided, the filter functions
                     argument names will be used instead.
        :param decider: a function of signature
                        `(function, incoming_keys, accepted_keys)` that returns
                        True if the filter function should be called and False
                        otherwise. Defaults to
                        :meth:`~.all_not_none_decider`
        :param acceptable_values: A list of acceptable values for the parameter
                                  of the filter function (or a list of lists if
                                  the filter function takes multiple parameters)
        :param types: The type of the parameter accepted by the incoming filter
                      function (or a list of types if the function takes
                      multiple parameters)
        :param descriptions: A description for the incoming filter function's
                             argument (or a list of descriptions if the filter
                             function takes multiple arguments)
        :param output_key: The key to use to output the provided value. Will
                           default to the only value in keys if keys has
                           length 1.
        """
        kwargs['transform'] = function
        if kwargs.get('decider'):
            kwargs['decide'] = kwargs.get('decider')
        return type('filter', (self.filter_class,), kwargs)