# Why Union{Missing, Int}==Union{Int, Missing}, while Tuple differs?

**URL:** <https://discourse.julialang.org/t/why-union-missing-int-union-int-missing-while-tuple-differs/22538>\
**Category:** General Usage\
**Tags:** question\
**Created:** [March 30, 2019, 12:35pm UTC](https://discourse.julialang.org/t/why-union-missing-int-union-int-missing-while-tuple-differs/22538 "2019-03-30T12:35:29Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Gu\_Junhua](https://avatars.discourse-cdn.com/v4/letter/g/48db29/32.png) [@Gu\_Junhua](https://discourse.julialang.org/u/Gu_Junhua)\
**Post date:** [March 30, 2019, 12:35pm UTC](https://discourse.julialang.org/t/why-union-missing-int-union-int-missing-while-tuple-differs/22538/1 "2019-03-30T12:35:30Z")

</div>

I know it is necessary for Union to behavior like this, while the type parameter order of Tuple must batter.

But how? Is Union specially handled by the julia compiler?

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [March 30, 2019, 12:40pm UTC](https://discourse.julialang.org/t/why-union-missing-int-union-int-missing-while-tuple-differs/22538/2 "2019-03-30T12:40:24Z")

</div>

The definition of two types `T` and `S` being equal is that `T<:S && S<:T`. There are also some normalization for types, e.g.:

```julia
julia> a = Union{Missing, Int}
Union{Missing, Int64}

julia> b = Union{Int, Missing}
Union{Missing, Int64}

```

so they actually end up being represented identically.

---

<div class="post-metadata">

**Author:** ![quinnj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/quinnj/32/11_2.png) [@quinnj](https://discourse.julialang.org/u/quinnj)\
**Post date:** [March 30, 2019, 4:07pm UTC](https://discourse.julialang.org/t/why-union-missing-int-union-int-missing-while-tuple-differs/22538/3 "2019-03-30T16:07:02Z")

</div>

Yeah, think of a `Union` as a _ **set** _ of Types, i.e. unordered collection of unique items, whereas a `Tuple` Type is just an ordered list of Types. You can see the set behavior of `Union` by doing things like `Union{Int, Int, Float64}`, or as you’ve noticed, `Union{Int, Missing} == Union{Missing, Int}`.
