Skip to content

madoos/functional-implementations

Repository files navigation

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

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published