we use recursion heavily preferably using functions like folds or find. Also we has our domain specific recursive datastructures which I don’t think is uncommon and for those we implement folds and traversals used in business logic. Also often even views are recursing (trees).
Unfortunetely I can’t offer access to code for analysis to whole app but this package (we use extensively) is also a good example GitHub - turboMaCk/lazy-tree-with-zipper: Lazy rose tree (multiway tree) with zipper. In Elm
More broadly…
“no runtime exceptions” is marketing claim. Reality is more like “avoiding avoidable runtime exceptions within what is believed to be reasonable tradeoff by authors”. We know that infinite recursion is a problem in any turing complete laguage. You can try to detect some fix point things like Idris does for instance but won’t be able to detect every single one anyway (formaly proven). Function equality was already metioned as another example of runtime exceptions - that’s due to lack of eq
“type class”. I also encourage you to check totality checks for recursive functions in Idris as it might be relevant to your work.