In arrow do notation, you can use the rec keyword to write recursive definitions. So for example:
rec
name <- function -< input
input <- otherFunction -< name
How can this ever evaluate? It seems like it would just go into an infinite loop or something. I know it evaluates to the loop arrow combinator, but I don't understand how that works either.
EDIT: that powers example is really helpful. How would you write that with do notation, though? I assume you would need to use rec.