IMHO does a better job than Lodash, because:
1. All functions are automatically curried.
2. The order of parameters lends itself to composition.
EDIT: 3. Transducers.
I've worked on codebases where people ignore all built-in JS functions (like Array.map/filter) and write Ramda spaghetti instead with multiple nested pipes and lens and what not to show off their FP purism.
Most of the time, you don't need any of this, it just makes the codebase unreadable, and hard for new people to join the project and be productive in a timely fashion.
This is exactly how I felt when I inherited a big project that uses lodash/fp. Having spent ~6 months with the code now I prefer having a functional layer on top of JS. It does make sense.
It’s nice to be able to make a function as concisely as something like:
Const foo_finder = R.find( R.propEq( ‘prop’, ‘foo’ ) )
...
Const a_foo = foo_finder( a_list )
We have code so use code which can be parsed, evaluated by the type checker, and so on. What if you mistype 'fop' instead of 'foo'?