When working with tuples, you can ‘pop’ the first entry via dispatch as follows:

```
tuplepop(t::Tuple{<:Any, Vararg}) = t[2:end]
tuplepop(t::Tuple{}) = t
```

But how can I determine the type of the result ahead of time?

This is the best I can come up with, but it’s hideous:

```
tuplepop_type(::Type{T}) where T<:Tuple{<:Any, Vararg} = Tuple{T.parameters[2:end]...}
tuplepop_type(::Type{Tuple{}}) = Tuple{}
```