You made a small mistake in your first `+=` proc. What you _want_ to do in a proc such as that is _mutate_ the existing input, not produce an output.
You want to change the existing `VGALine` in `a` (and by extension: `line`) instead of making an entirely new one, right? You did the opposite and created a new one (so line += 1 creates a new VGALine value). And since nim doesn't allow you to use a proc that returns something without _explicitly saying_ that you don't want it to return something, this is the compiler basically refusing to compile something that it is betting on is an accident. Try to replace you `+=` proc for VGALine with something like this: proc `+=` (a: var VGALine, b: int) = a = ((a.int+b) mod 80).VGALine Run