(it's what I'm planning for my own lang, having `trace` be "blessed" to not make a function unpure despite I/O)