>> What is confusing to me is the recursion on the let construct.
Oh sry I may have misunderstood your question then.
You can think of defining 'forever' itself as a let construct. Starting from the "simpler" implementation:
let forever a = a >> forever a
Now let's just give the rhs another name, again using 'let':
let forever a = (let a' = a >> forever a in a')
But we can see that a' is actually equal to (forever a), so we can replace on in the rhs:
let forever a = (let a' = a >> a' in a')
There is no trickery, no getting away, this recursion is the same as what you have thought of:)