So we're using the very nice ramda library at work, which is great because we're able to use a largely point-free style of code. The problem with this is that there are far fewer places to look when things go wrong that point to something in our code; most run time errors occur because of a misuse of composed ramda functions. Combine this with passing these functions to a framework that uses a lot of redirection (we're on react/redux), and often when something goes wrong, it's deep in library-only code, and it's very hard to find out where I went wrong.
Is there any way to mitigate this problem without moving away from point-free style?
One option is to use
R.tap, like so:
const f = R.pipe( R.tap(console.log), // logs x g, R.tap(console.log), // logs g(x) h, R.tap(console.log), // logs h(g(x)) i, R.tap(console.log), // logs i(h(g(x))) j, R.tap(console.log) // logs j(i(h(g(x)))) ); f(x);
Another option is to use Sanctuary, which raises informative exceptions when a function is applied to arguments of the wrong types.