Reducing it to 2 was just a failed attempt to see whether that would help fix some slow cases; in fact, it can create new slow cases by replacing concrete types by variables.
algo::generate
iter::successors