I can't think of any situations where cycles make themselves felt after typer. It is likely that there is some point after typer - possibly multiple points - at which we should be forcing every info which will eventually be forced anyway. Although it would be even better if we took all of this out of the hands of the call sites, which will never, ever get it right. Everyone should just call "info". If it detects a cycle, return some kind of type proxy like
```
case class RawInfo(incompleteInfo: Type) extends TypeProxy
```
And then if you have reason to care about the distinction, you can act on it.

What makes this hard, I expect, is all the compiler mutability - if you run into a cycle halfway through typing something complicated, there is all this state in the air. Just another advertisement for less mutability.