class TupleDomain {

    @Override
    public boolean equals(Object obj)
    {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        TupleDomain<?> other = (TupleDomain<?>) obj;
        return Objects.equals(this.domains, other.domains);
    }

    private  TupleDomain(Optional<Map<T, Domain>> domains);

}