madoos-functional-implementations
v0.0.1
Published
Functional implementations based on Ramda and the functional programming book of Michael Fogus
Downloads
2
Readme
madoos-functional-implementations
Functional implementations based on Ramda and the functional programming book of Michael Fogus.
Getting Started
To install:
npm i --save madoos-functional-implementations
In your project:
const fImp = require('madoos-functional-implementations');
const get = fImp.rightCurry((obj, prop) => obj[prop])
const getFoo = get('foo')
getFoo({foo: 'baz'}) // => baz
Methods
.memoize
.transformArgs
.curry
.rightCurry
.dispatch
.flip
.compose
.memoize(fn[Funtion])
Cache the result Of the function passed as argument.
const fibonacci= (n) => {
return (n === 0 || n === 1) ? n : fibonacci(n - 1) + fibonacci(n - 2)
}
const cacheFibonacci = fImp.memoize(fibonacci);
cacheFibonacci(20); //=> 6765
.transformArgs(fn[Funtion], tranform[Function], ....)
Transforms the arguments of the first function positionally with the other functions passed as argument.
const getFoo = (obj) => obj[foo];
const isFoo = fImp.transformArgs((val) => val === 'foo', getFoo);
isFoo({ foo: 'baz'}) //=> false
.curry(fn[Funtion])
Apply curryfication to the function passed as argument.
const get = fImp.cury((key, obj) => obj[key]);
get('foo')({foo: 'baz'}) // => baz
.rightCurry(fn[Funtion])
Apply curryfication from the right.
const get = fImp.rightCurry((obj, key) => obj[key]);
get('foo')({foo: 'baz'}) // => baz
.dispatch(fn1[Funtion], fn2[Funtion], ...)
Returns a function that executes the passed functions as argimento if it returns undefined.
const strinReverse = (s) => {
if(typeof s === 'string') return s.split('').reverse().join('');
}
const arrayReverse = (a) => {
if(Array.isArray(a)) return a.reverse();
}
const reverse = fImp.dispatch(strinReverse, arrayReverse);
reverse('abc') // => 'cba'
reverse([1, 2, 3]) // => [3, 2, 1]
.flip(fn[Funtion])
Returns a function that is executed with the reverse order in the arguments.
const concat = (a, b) => `${a} ${b}`
const concatReverse = fImp.flp(concat);
concat('hello', 'world'); // => hello world
concatReverse('hello', 'world') // word hellow
.compose(fn1[Funtion], fn2[Function], ...)
Returns a function that executes the function composition.
const nums = [1, 2, 3]
const sumTwo = (n) => n + 2
const double = (n) => n + n
nums.map(sumTwo).map(double) // => [6, 8, 10]
const doubleAddTwo = fImp.compose(double, sumTwo)
nums.map(doubleAddTwo) // => [6, 8, 10]
Run test
npm test
npm run test:linter:show
npm run test:unit:show
npm run test:cover:show
Run test and generate report files
npm run test:report
npm run test:linter:report
npm run test:unit:report
npm run test:cover:report