Initially, we establish some constructions using `struct`

and making sure Julia knows how to iterate over this object by defining `length`

, `eltype`

, and `iterate`

.

```
struct OneTo{T}
val::T
end
OneTo(N) = OneTo{Int}(N)
Base.length(S::OneTo) = S.val
Base.eltype(::Type{OneTo}) = Int
function Base.iterate(S::OneTo, state=1)
state > S.val ? nothing : (state, state+1)
end
```

We can then wrap it in a function for easy instantiation of the generator, using the parentheses instead of square braces to designate generator rather than list comprehension.

```
oneto(N) = (x for x in OneTo(N))
for k in oneto(10)
println(k)
end
```

© Daniel Marvin. Last modified: June 19, 2021.