# Dispatch on Set{Union}

**URL:** <https://discourse.julialang.org/t/dispatch-on-set-union/9604>\
**Category:** General Usage\
**Tags:** question\
**Created:** [March 9, 2018, 2:02am UTC](https://discourse.julialang.org/t/dispatch-on-set-union/9604 "2018-03-09T02:02:20Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Robert\_Honig](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/robert_honig/32/4930_2.png) [@Robert\_Honig](https://discourse.julialang.org/u/Robert_Honig)\
**Post date:** [March 9, 2018, 2:02am UTC](https://discourse.julialang.org/t/dispatch-on-set-union/9604/1 "2018-03-09T02:02:20Z")

</div>

I have a function `foo`. I want to call

```julia
setofbar = Set([Bar()])
setofbaz = Set([Baz()])
foo(setofbar)
foo(setofbaz)

```

To do so, I declared `foo` as follows:

```julia
function foo(obj::Set{Union{Bar, Baz}})

```

This gives me a “no method matching” error for the following lines:

```julia
foo(setofbar)
foo(setofbaz)

```

What’s the right way to do dispatch here?

---

<div class="post-metadata">

**Author:** ![cstjean](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cstjean/32/1444_2.png) [@cstjean](https://discourse.julialang.org/u/cstjean)\
**Post date:** [March 9, 2018, 2:10am UTC](https://discourse.julialang.org/t/dispatch-on-set-union/9604/2 "2018-03-09T02:10:55Z")

</div>

`Set{Union{Bar, Baz}}` is a set of Bar and Baz, which is not what you pass. You want to accept either a set of Bar, or a set of Baz. That’s `Set{T} where T<:Union{Bar, Baz}`

EDIT: or `Union{Set{Bar}, Set{Baz}}`, though it’s not strictly equivalent.

---

<div class="post-metadata">

**Author:** ![Robert\_Honig](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/robert_honig/32/4930_2.png) [@Robert\_Honig](https://discourse.julialang.org/u/Robert_Honig)\
**Post date:** [March 9, 2018, 2:27am UTC](https://discourse.julialang.org/t/dispatch-on-set-union/9604/3 "2018-03-09T02:27:07Z")

</div>

@cjstean I thought I would be able to figure it out based on your solution, but can you give me the concrete function definition for the case outlined?

---

<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 9, 2018, 8:14am UTC](https://discourse.julialang.org/t/dispatch-on-set-union/9604/4 "2018-03-09T08:14:24Z")

</div>

`function foo(obj::Set{T}) where {T <: Union{Bar, Baz}}`
