We already have `{.gcsafe.}`, and `{.noSideEffect.}` blocks and you can tag functions as `{.sideeffect.}`. Why stay at Rust level when you can go full blown Haskell?
Example C imported function tagged as side-effect: <https://github.com/status-im/nim-blscurve/blob/ab07ea0/blscurve/miracl/milagro.nim#L298> proc FP2_BLS12381_output*(x: ptr FP2_BLS12381) {.sideeffect, milagro_func.} Run And example `{.noSideEffect.}` block for benchmarking: <https://github.com/status-im/nimbus-eth2/blob/9174132/nbench/bench_lab.nim#L66-L74> template fnEntry(name: string, id: int, startTime, startCycle: untyped): untyped = ## Bench tracing to insert on function entry {.noSideEffect, gcsafe.}: discard BenchMetrics[id].numCalls.atomicInc() let startTime = getMonoTime() when SupportsGetTicks: let startCycle = getTicks() else: let startCycle = 0 Run