Make recursive type alias contracts work in `let`