def union_conforms(element: Union, etype, namespace: Dict[str, Any], conforms: Callable) -> bool:
    """ Determine whether element conforms to at least one of the types in etype

    :param element: element to test
    :param etype: type to test against
    :param namespace: Namespace to use for resolving forward references
    :param conforms: conformance test function
    :return: True if element conforms to at least one type in etype
    """
    union_vals = etype.__union_params__ if sys.version_info < (3, 6) else etype.__args__
    return any(conforms(element, t, namespace) for t in union_vals)