∀ {m : Type u_1 → Type u_2} {n : Type u_1 → Type u_3} {o : Type u_1 → Type u_4} {α β γ : Type u_1} [inst : Monad m]
  [LawfulMonad m] [inst_2 : Monad n] [LawfulMonad n] [inst_4 : Monad o] [LawfulMonad o] [inst_6 : MonadAttach n]
  [WeaklyLawfulMonadAttach n] [inst_8 : MonadLiftT m n] [LawfulMonadLiftT m n] [inst_10 : MonadLiftT n o]
  [LawfulMonadLiftT n o] [inst_12 : Std.Iterator α m β] [Std.Iterators.Finite α m] [inst_14 : Std.IteratorLoop α m o]
  [Std.LawfulIteratorLoop α m o] {it : Std.IterM m β} {f : β → n (ULift.{u_1, 0} Bool)} {init : γ}
  {g : β → γ → o (ForInStep γ)},
  forIn (Std.IterM.filterM f it) init g =
    forIn it init fun out acc => do
      let __do_lift ← liftM (f out)
      if __do_lift.down = true then g out acc else pure (ForInStep.yield acc)