A bit late to the party, but here’s an overview of error handling methods that I did a while ago:
Composable Error Handling in OCaml (keleshev.com)
It compares the following approaches:
- Exceptions
- Result type with strings for errors
- Result type with custom variants for errors
- Result type with polymorphic variants for errors