Hi all,

does there exist a function which can transform a tuple type of the schema `Tuple{Union, NonUnion, Union, ...}`

, i.e. with Union types on the first level, such that the Union goes out and we have `Union{Tuple{NonUnion, NonUnion, NonUnion, ...}, Tuple{NonUnion, NonUnion, NonUnion, ...}, ...}`

For example

```
T = solutionfunction(Tuple{Union{Int, String}, Bool})
T == Union{Tuple{Int, Bool}, Tuple{String, Bool}}
```

Just wondering, why are you trying to do this?

This is from the I-really-hope-someone-improves-on-this school of problem solving, but

```
function solutionfunction(T::Type{<:Tuple})
combinations = collect(Iterators.product(map(Base.uniontypes, fieldtypes(T))...))
Union{map(c -> Tuple{c...}, combinations)...}
end
```

is a start:

```
julia> solutionfunction(Tuple{Union{Int, String}, Bool})
Union{Tuple{Int64,Bool}, Tuple{String,Bool}}
```

I am not sure if I am supposed to use `Base.uniontypes`

or not.

1 Like

I am currently experimenting with type-inference

thanks a lot @Tamas_Papp

I just understood your solution. It is very concise. Thank you very much for your effort!

1 Like