not to be used exactly since its performance is pretty bad
val rI = new RightIterator(i)
val loopA = rl.grouped(MagicNumberHere).map(originalSemigroup.sumOption(_)).map(conditionallyConvert(_))
call a recursive function on loopA to do your logic on it again

I think that works?