Skip to content

Curry functions, but expose their accumulated arguments and underlying function so that they can be meaningfully compared against one another

Notifications You must be signed in to change notification settings

micro-js/curry-transparently

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

curry-transparently

Build status Git tag NPM version Code style

Curry functions, but expose their accumulated arguments and underlying function so that they can be meaningfully compared against one another

Installation

$ npm install @f/curry-transparently

Usage

const curry = require('@f/curry-transparently')

const curriedAdd = curry(add)
const add1 = add(1)
const add2 = add(2)

add1(3) === 4
add2(3) === 5

add1.$$fn === add
add1.$$args === [1]

add2.$$fn === add
add2.$$args === [2]

function add (a, b) {
  return a + b
}

Why?

Traditional currying mechanisms isolate the information about what has been curried and what the underlying function is inside of an opaque closure. This prevents you from directly comparing two curried functions to determine their equivalence. This can be problematic for things like virtual DOM diffing where event handlers are constantly being created which, even though they may contain identical arguments and call an identical underlying function, are considered unique values.

Here's a comparator function to decide where two transparently curried functions are equivalent:

var arrayEqual = require('@f/array-equal')

function compareFns (a, b) {
  return a.$$fn === b.$$fn && arrayEqual(a.$$args, b.$$args)
}

API

curryTransparently(fn, arity, args)

  • fn - The function you want to curry
  • arity - Optional, if not supplied fn.length will be used.
  • args - Optional. An initial set of arguments to start out with.

Returns: A curried representation of fn, complete with $$args and $$fn properties that can be used to inspect it.

License

MIT

About

Curry functions, but expose their accumulated arguments and underlying function so that they can be meaningfully compared against one another

Resources

Stars

Watchers

Forks

Packages

No packages published