const { curry, pipe, juxt, replace, join } = require('ramda');
// main function
const operationOnUnitString = curry((f, unitString) => pipe(
juxt([
pipe(
parseFloat,
f
),
replace(/\d/g, ''),
]),
join(''),
)(unitString));
// demo
const double = (x) => x * 2;
const add1 = (x) => x + 1;
console.log('without currying');
console.log("double 1px:", operationOnUnitString(double, "1px"));
console.log("add 1 to 2px:", operationOnUnitString(add1, "2px"));
console.log("double 2em:", operationOnUnitString(double, "2em"));
console.log("add 1 to 3em:", operationOnUnitString(add1, "3em"));
console.log("add 1 then double 2em", operationOnUnitString(
pipe(
add1,
double,
),
"2em"
));
console.log("double then add 1 to 2em", operationOnUnitString(
pipe(
double,
add1,
),
"2em"
))
console.log('with currying');
const doubleUnitString = operationOnUnitString(double);
const add1ToUnitString = operationOnUnitString(add1);
console.log("double 6 em:", doubleUnitString("6em"));
console.log("add 1 to 5em:", add1ToUnitString("5em"));