How to tell if an effect is algebraic? I've read Bauer's What is algebraic about algebraic effects and handlers? and he talks about IO being an algebraic effect, even though it doesn't have any equations. In other papers on algebraic effects and handlers, people mention effects that are not algebraic, like backtracking. How does one can tell an algebraic effect apart from a non-algebraic one?
The general answer which you do not want to hear is: an effect is algebraic if it can be described using operations and equations. The question is a bit open-ended and gives no hint as to what you're expecting, so perhaps you deserve such a useless answer.

Nevertheless, it's still good to know some typical examples, as they help you develop a feeling for things:


Continuations are not algebraic. That's important because there are effects that let you encode continuations, and so those are not aglebraic either. (But be careful about the meaning of "encode").
Delimited continuations are algebraic, see Section 6.11 of "Programming with algebraic effects and handlers". Because asynchronuous threads, cooperative multi-threading etc., are a form of delimited continuation, these usually fall into the realm of algebraic effects.
If your effect looks like you're passing around state of some sort, then it's likely algebraic.
Nondeterministic choice, search, etc., are typically algebraic.
Exception-like effects are algebraic (transactions of various sorts are included).
Anything that looks like communication (I/O, reader monad) is algebraic.
Probabilistic programming is algebraic.


Most useful effects fall under one of these cases. If I forgot anything, I am sure people will remind me in the comments.