Based on the discussion at https://leanprover.zulipchat.com/#narrow/stream/270676-lean4/topic/for.2C.20unexpected.20need.20for.20type.20ascription/near/269083574 The consensus seemed to be that "auto pure" is more confusing than its worth.
16 lines
388 B
Text
16 lines
388 B
Text
def build (n : Nat) : Array Unit := Id.run <| do
|
||
let mut out := #[]
|
||
for _ in [0:n] do
|
||
out := out.push ()
|
||
out
|
||
|
||
@[noinline] def size : IO Nat := pure 50000
|
||
|
||
def bench (f : ∀ {α : Type}, α → IO Unit := fun _ => pure ()) : IO Unit := do
|
||
let n ← size
|
||
let arr := build n
|
||
timeit "time" $
|
||
for _ in [:1000] do
|
||
f $ #[1, 2, 3, 4].map fun ty => arr[ty]
|
||
|
||
#eval bench
|