I haven't personally seen much use of recursion schemes when building compilers or interpreters, and I'm honestly not quite sure why. Almost all the common ones (cata/ana/para/apo) seem quite handy for various tasks, especially when manipulating ASTs. Is this just because most implementation languages lack the type systems require to express them, or some other reason I'm not seeing? If your language of choice performs specialisation based on type, I don't see them causing much slowdown.
Context: I want to use recursion schemes in my compiler, but I don't see them used much, and I want to know why so I can hopefully avoid any pitfalls I'm missing.
I am not referring to the visitor pattern, which appears to be a slightly weaker version of recursion schemes for OO languages, due to requiring manual creation of functions to access the children of a node, whereas recursion schemes + a little bit of compiler magic can do it fully automatically.