<A extends Array<unknown>, B extends Array<unknown>, C>(
f: (...a: A) => (...b: B) => C
): (...b: B) => (...a: A) => CReverses the order of arguments for a curried function.
When to use
Use to adapt a curried function when its argument groups need to be supplied in the opposite order.
Example (Flipping curried arguments)
import { Function } from "effect"
import * as assert from "node:assert"
const f = (a: number) => (b: string) => a - b.length
assert.deepStrictEqual(Function.flip(f)("aaa")(2), -1)combinators
Source effect/Function.ts:4545 lines
export const const flip: <
A extends Array<unknown>,
B extends Array<unknown>,
C
>(
f: (...a: A) => (...b: B) => C
) => (...b: B) => (...a: A) => C
Reverses the order of arguments for a curried function.
When to use
Use to adapt a curried function when its argument groups need to be supplied
in the opposite order.
Example (Flipping curried arguments)
import { Function } from "effect"
import * as assert from "node:assert"
const f = (a: number) => (b: string) => a - b.length
assert.deepStrictEqual(Function.flip(f)("aaa")(2), -1)
flip = <function (type parameter) A in <A extends Array<unknown>, B extends Array<unknown>, C>(f: (...a: A) => (...b: B) => C): (...b: B) => (...a: A) => CA extends interface Array<T>Array<unknown>, function (type parameter) B in <A extends Array<unknown>, B extends Array<unknown>, C>(f: (...a: A) => (...b: B) => C): (...b: B) => (...a: A) => CB extends interface Array<T>Array<unknown>, function (type parameter) C in <A extends Array<unknown>, B extends Array<unknown>, C>(f: (...a: A) => (...b: B) => C): (...b: B) => (...a: A) => CC>(
f: (...a: A) => (...b: B) => Cf: (...a: A extends Array<unknown>a: function (type parameter) A in <A extends Array<unknown>, B extends Array<unknown>, C>(f: (...a: A) => (...b: B) => C): (...b: B) => (...a: A) => CA) => (...b: B extends Array<unknown>b: function (type parameter) B in <A extends Array<unknown>, B extends Array<unknown>, C>(f: (...a: A) => (...b: B) => C): (...b: B) => (...a: A) => CB) => function (type parameter) C in <A extends Array<unknown>, B extends Array<unknown>, C>(f: (...a: A) => (...b: B) => C): (...b: B) => (...a: A) => CC
): (...b: B extends Array<unknown>b: function (type parameter) B in <A extends Array<unknown>, B extends Array<unknown>, C>(f: (...a: A) => (...b: B) => C): (...b: B) => (...a: A) => CB) => (...a: A extends Array<unknown>a: function (type parameter) A in <A extends Array<unknown>, B extends Array<unknown>, C>(f: (...a: A) => (...b: B) => C): (...b: B) => (...a: A) => CA) => function (type parameter) C in <A extends Array<unknown>, B extends Array<unknown>, C>(f: (...a: A) => (...b: B) => C): (...b: B) => (...a: A) => CC =>
(...b: B extends Array<unknown>b) =>
(...a: A extends Array<unknown>a) => f: (...a: A) => (...b: B) => Cf(...a: A extends Array<unknown>a)(...b: B extends Array<unknown>b)