shrink functions take shrink parameter, not generators
Split out primitive generators