def curried(func):
    """curried(func) takes function with signature:
    
    func(self, *args)

    and makes it:

    curried_func(*args) --> func(self, *args)

    That is, it makes the self implicit
    """
    def curried_func(self, *args):
        return func(self, *args)
    curried_func.__doc__ = """Curried version of:\n%s""" % func.__doc__
    return curried_func