def viable_source_types (target_type):
    """ Helper rule, caches the result of '__viable_source_types_real'.
    """
    assert isinstance(target_type, basestring)
    if target_type not in __viable_source_types_cache:
        __vst_cached_types.append(target_type)
        __viable_source_types_cache [target_type] = __viable_source_types_real (target_type)
    return __viable_source_types_cache [target_type]