Generates a tuple by generating values for each of the specified
    generators.
    This is a class factory, it makes a class which is a closure around the
    specified generators.

def tuple_of(*generators):
    """
    Generates a tuple by generating values for each of the specified
    generators.
    This is a class factory, it makes a class which is a closure around the
    specified generators.
    """

    class TupleOfGenerators(ArbitraryInterface):
        """
        A closure class around the generators specified above, which
        generates a tuple of the generators.
        """

        @classmethod
        def arbitrary(cls):
            """
            Generate a tuple of the enclosed generators.
            """
            return tuple([
                arbitrary(generator) for generator in generators
                if generator is not tuple
            ])

    TupleOfGenerators.__name__ = ''.join([
        'tuple_of(', ', '.join(generator.__name__ for generator in generators),
        ')'
    ])
    return TupleOfGenerators