@lcf.vs/curryable

1.0.4 • Public • Published

curryable

An utility to make any function repeatedly curryable

Install

npm i @lcf.vs/curryable

Usage

Basic example

import curryable from '@lcf.vs/curryable'

const log = curryable((...values) => console.log(values), 0)

log(1, 2, 3) // [0, 1, 2, 3]
log.curry(1, 2, 3)(4, 5, 6) // [0, 1, 2, 3, 4, 5, 6]
log.curry(1, 2, 3).curry(4, 5, 6)(7, 8, 9) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Real world example

import path from 'path'
import curryable from '@lcf.vs/curryable'

const __filename = new URL(from.url).pathname
const resolve = curryable(path.resolve, __filename, '..')
// const __dirname = resolve()
const src = resolve.curry('src')
const html = src.curry('html')
const assets = src.curry('assets')
 
const paths = {
  index: html('index.html'),
  assets: [
    assets('js/index.js'),
    assets('css/style.css')
  ]
}

API

/**
 * Returns a reduced function from `fn`, with a `.curry` method to repeat the
 * process on the new one
*  @function curryable
 * @param {Function} fn
 * @param {...*} args
 * @return {Function&Object}
 */
import curryable from '@lcf.vs/curryable'

function fn () {}

const args = []
const fn = curryable(fn)
const newFn = fn.curry(...args)
/**
 * Returns a reduced function from `fn`
*  @function curry
 * @param {Function} fn
 * @param {...*} args
 * @return {Function}
 */
import {curry, isCurryable} from '@lcf.vs/curryable'

function fn () {}

const args = []
const newFn = curry(fn, ...args)
/**
 * Checks if `fn` has the provided `.curry()` method
*  @function isCurryable
 * @param {Function} fn
 * @return {boolean}
 */
import {curryable, isCurryable} from '@lcf.vs/curryable'

function fn () {}

const args = []
const result = isCurryable(curryable(fn, ...args)) // true

License

MIT

Package Sidebar

Install

npm i @lcf.vs/curryable

Weekly Downloads

5

Version

1.0.4

License

MIT

Unpacked Size

4.75 kB

Total Files

4

Last publish

Collaborators

  • lcf.vs