An utility to create curried functions that its parameters are reordered by user-defined order
npm install create-curried
Returns a Context
for given function.
maxStaticArgCount
is maximum number of arguments given function takes, and will be used to determine where non-rest parameters end.
This includes optional parameters as well, but not rest parameters because they have no static argument count.
Contains informations about given function such as how parameters should be ordered.
Generated function's parameters' order depends on order of method calls.
For example, on below, reversedF
is b => a => [a, b]
, and justF
is a => b => [a, b]
.
const f = a => b => [a, b]
const reversedF = curried(f)
.takes(1)
.takes(0)
.generate()
const justF = curried(f)
.takes(0)
.takes(1)
.generate()
Parameters that are not taken from given function will be filled with undefined
.
Takes a parameter of the function with given position.
Takes thisArg of the function.
Takes rest parameter of the function. because of curried function must take single argument, generated function will take an array instead of taking arguments directly.
Bound values can be overwritten by generated function's parameters.
⚠️ This method is a HOF(Higher-Order Function).
Binds argument for given position. Returns a function that can set argument.
Returned function takes single generic parameter that can coerce type of value
.
Binds thisArg.
The method is a HOF due to support TypeScript well.
The method takes single generic parameter that can coerce type of thisArg
.
Generates curried function that its parameters are ordered by order of method calls.
The method takes single generic parameter ResultFn
that will be used to do forced type cast for generated function, due to there is no way to handle generic parameters of a function in type level.
ResultFn
is type of given function by default.
const { curried } = require('create-curried')
const map = curried(Array.prototype.map)
.takes(0)
.takesThis()
.generate()
const plusOne = x => x + 1
const plusOneEach = map(plusOne)
plusOneEach([1, 2, 3]) // => [2, 3, 4]
const toBinaryString = curried(Number.prototype.toString)
.withStatic(0)(2)
.takesThis()
.generate()
toBinaryString(10) // => '1010'
import { curried } from 'create-curried'
const map = curried(Array.prototype.map)
.takes(0)
.takesThis()
.generate<
<T, U>(callbackfn: (value: T, index: number, array: Array<T>) => U) =>
(array: Array<T>) =>
Array<U>
>()
const plusOne = (x: number) => x + 1
const plusOneEach = map(plusOne)
plusOneEach([1, 2, 3]) // => [2, 3, 4]
const toBinaryString = curried(Number.prototype.toString)
.withStatic(0)<number>(2)
.takesThis()
.generate<(number: number) => string>()
toBinaryString(10) // => '1010'