New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

yank-down

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

yank-down

Rearrange curried arguments

  • 0.3.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
9
increased by350%
Maintainers
1
Weekly downloads
 
Created
Source

Yank Down

npm version devpendencies Build Status codecov

Have you ever been unsure what value to pass first in a curried function?

const divide = numerator => denominator => numerator/denominator;

and ended up getting it wrong?

const needToBeDividedBy3 = [1,3,4,5,2];

const wrongAnswer = needToBeDivided.map(divide(3));
                                     // ^^^^^^^^^
                                     // would return 3/number :/

Enter yankDown, the titular function of this module.

import { yankDown } from 'yank-down'; // import yankDown

const flippedDivide = yankDown(divide)(1); // yank arg 1 to be arg 0

const correctAnswer = needToBeDivided.map(flippedDivide(3));
                                       // ^^^^^^^^^^^^^^^^
                                       // arg 1 yanked down to arg 0

AMAZING!!!

Multi-Parameter Functions

Yank Down will even work with multi-parameter functions.


const factoryFactory =
  (factoryName, factoryConfig = {}) =>
    (objProps = {}) =>
      { ...objProps, factoryConfig, type: factoryName }
;

const flippedFF = yankDown(factoryFactory)(1); // yankDown properly flips calls

SO CONVENIENT

Arbitrary Curry Depth

As you would expect, yankDown can work with curried functions of arbitrary depth

const makeArray = one => two => three => [one, two, three];

console.log(makeArray(1)(2)(3)); // [1, 2, 3];

const yankedMakeArray = yankDown(makeArray)(1);

console.log(yankedMakeArray(1)(2)(3)); // [2, 1, 3]

JUST WOW.

Yank supports binding syntax.

also, yankDown is exported as yank

import { yank } from 'yank-down';

// this is equivalent to
yank(makeArray)(1);

// this
yank.bind(makeArray)(1);

// and this (using new :: function binding)
makeArray::yank(1);

yank-down also has 2 other utility functions

collect

collect is a function that creates a depth deep curried thunk that collects arguments and then either returns them or passes them to a passed callback cb.

collect(depth, cb = false, preexistingArgsList = [])

It's really no so bad. Here's an example

import { collect } from 'yank-down';

cosnt thunk = collect(3) // produces a depth 3 thunk.

expect(thunk(1)(2)(3)).to.deep.equal([[1], [2], [3]]);

const cbThunk = collect(4, console.log);

cbThunk('a', 'e')('b')('c')('d'); // prints [['a', 'e'], ['b'], ['c'], ['d']]

apply

apply takes a list of lists of arguments like what is produced by collect and applies it to a curried thunk, then returns the result.

apply(curriedFunc)(argsListList)

Check it out.

import { apply } from 'yank-down';

apply(makeArray)([[1], [2]]); // returns c => [1, 2, c]

apply(makeArray)([['one'], ['two'], ['three']]); // returns ['one', 'two', 'three']

// apply can also use bind syntax to get its functions
makeArray::apply([['such'], ['cool']])('amaze'); // returns ['such', 'cool', 'amaze']

Keywords

FAQs

Package last updated on 07 Apr 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc