If it is one of your functions add some metadata to mark if it has side effects.
Then you can check it with ((meta f) :side-effects)
If it is a third party function there is no way that I know of (other that changing their code to use the solution described above).
Actually, there is even then but it isn't pretty. You can wrap the function with your own, which has metadata.
Also, keep in mind that a pure function has one additional property besides not having side effects. Its evaluation depends only on its parameters, and not some global shared state, like an external variable or system time. You might want to add this to your metadata, too. Then you can check if it is really pure by checking for both metadata entries.
However, be warned:
This simply wouldn't work for functions that take other functions as parameters. Here's an example: Does calling map
have side effects?
It doesn't here: (map inc [1 2 3])
But it does here: (map println [1 2 3])
Because the passed function may or may not have side effects.