{M : Type → Type} →
  [Monad M] →
    [MonadLiftT Lean.MetaM M] →
      [MonadControlT Lean.MetaM M] →
        [Lean.MonadError M] →
          {α : Type} → (Array Lean.Expr → Lean.Expr → M α) → Array Lean.Expr → List ℕ → Lean.Expr → M α