a function of mine returns an iterator. in some cases, i want to return an empty iterator, but one that is efficient and typed. so i came up with this little thing

```
struct Empty{T} end
Base.iteratorsize(::Type{<:Empty}) = Base.HasLength()
Base.eltype(::Type{Empty{T}}) where T = T
Base.start(::Empty) = nothing
Base.done(::Empty, st) = true
Base.length(::Empty) = 0
empty(T) = Empty{T}()
```

but i’m wondering if there is some neat built-in way to do this