/-! This benchmark exercises * general elaboration, likely from many nested lambdas * code generation, ditto -/ set_option maxRecDepth 10000 def addALot (x: Nat) : StateM Nat Nat := do set x modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) modifyGet (λ y => ((), y + x)) let y <- get pure y #eval StateT.run' (addALot 2) 0