{m : Type → Type u_1} →
  {s : String.Slice} →
    (motive : Std.IterStep (Std.IterM m { p // p ≠ s.endPos }) { p // p ≠ s.endPos } → Sort u_2) →
      (x : Std.IterStep (Std.IterM m { p // p ≠ s.endPos }) { p // p ≠ s.endPos }) →
        ((it' : Std.IterM m { p // p ≠ s.endPos }) →
            (out : { p // p ≠ s.endPos }) → motive (Std.IterStep.yield it' out)) →
          ((it : Std.IterM m { p // p ≠ s.endPos }) → motive (Std.IterStep.skip it)) →
            (Unit → motive Std.IterStep.done) → motive x