Первый пример выглядит как функция ветвления / конвергенции, где второй аргумент просто передается как тождество.
const a = (f1, f2, val) => f1(f2(val), val);
const b = (f1, f2, val) => R.converge(f1, [f2, R.identity])(val);
const f1 = (a, b) => a + b;
const f2 = (a) => a * 2;
console.log(
a(f1, f2, 50),
);
console.log(
b(f1, f2, 50),
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js" integrity="sha256-buL0byPvI/XRDFscnSc/e0q+sLA65O9y+rbF+0O/4FE=" crossorigin="anonymous"></script>
Второй пример - это просто составная функция ...
const a = (f1, f2, val) => f1(f2(val));
const f1 = (a) => a * 2;
const f2 = (a) => a + 100;
console.log(
a(f1, f2, 50),
);
console.log(
R.compose(f1, f2)(50),
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js" integrity="sha256-buL0byPvI/XRDFscnSc/e0q+sLA65O9y+rbF+0O/4FE=" crossorigin="anonymous"></script>