<B, C>(bc: (b: B) => C): <A>(self: (a: A) => B) => (a: A) => C
<A, B, C>(self: (a: A) => B, bc: (b: B) => C): (a: A) => CComposes two functions, ab and bc into a single function that takes in an argument a of type A and returns a result of type C.
The result is obtained by first applying the ab function to a and then applying the bc function to the result of ab.
When to use
Use to compose exactly two unary functions into a reusable unary function.
Example (Composing two functions)
import { Function } from "effect"
import * as assert from "node:assert"
const increment = (n: number) => n + 1
const square = (n: number) => n * n
assert.strictEqual(Function.compose(increment, square)(2), 9)Source effect/Function.ts:4864 lines
export const const compose: {
<B, C>(bc: (b: B) => C): <A>(
self: (a: A) => B
) => (a: A) => C
<A, B, C>(self: (a: A) => B, bc: (b: B) => C): (
a: A
) => C
}
Composes two functions, ab and bc into a single function that takes in an argument a of type A and returns a result of type C.
The result is obtained by first applying the ab function to a and then applying the bc function to the result of ab.
When to use
Use to compose exactly two unary functions into a reusable unary function.
Example (Composing two functions)
import { Function } from "effect"
import * as assert from "node:assert"
const increment = (n: number) => n + 1
const square = (n: number) => n * n
assert.strictEqual(Function.compose(increment, square)(2), 9)
compose: {
<function (type parameter) B in <B, C>(bc: (b: B) => C): <A>(self: (a: A) => B) => (a: A) => CB, function (type parameter) C in <B, C>(bc: (b: B) => C): <A>(self: (a: A) => B) => (a: A) => CC>(bc: (b: B) => Cbc: (b: Bb: function (type parameter) B in <B, C>(bc: (b: B) => C): <A>(self: (a: A) => B) => (a: A) => CB) => function (type parameter) C in <B, C>(bc: (b: B) => C): <A>(self: (a: A) => B) => (a: A) => CC): <function (type parameter) A in <A>(self: (a: A) => B): (a: A) => CA>(self: (a: A) => Bself: (a: Aa: function (type parameter) A in <A>(self: (a: A) => B): (a: A) => CA) => function (type parameter) B in <B, C>(bc: (b: B) => C): <A>(self: (a: A) => B) => (a: A) => CB) => (a: Aa: function (type parameter) A in <A>(self: (a: A) => B): (a: A) => CA) => function (type parameter) C in <B, C>(bc: (b: B) => C): <A>(self: (a: A) => B) => (a: A) => CC
<function (type parameter) A in <A, B, C>(self: (a: A) => B, bc: (b: B) => C): (a: A) => CA, function (type parameter) B in <A, B, C>(self: (a: A) => B, bc: (b: B) => C): (a: A) => CB, function (type parameter) C in <A, B, C>(self: (a: A) => B, bc: (b: B) => C): (a: A) => CC>(self: (a: A) => Bself: (a: Aa: function (type parameter) A in <A, B, C>(self: (a: A) => B, bc: (b: B) => C): (a: A) => CA) => function (type parameter) B in <A, B, C>(self: (a: A) => B, bc: (b: B) => C): (a: A) => CB, bc: (b: B) => Cbc: (b: Bb: function (type parameter) B in <A, B, C>(self: (a: A) => B, bc: (b: B) => C): (a: A) => CB) => function (type parameter) C in <A, B, C>(self: (a: A) => B, bc: (b: B) => C): (a: A) => CC): (a: Aa: function (type parameter) A in <A, B, C>(self: (a: A) => B, bc: (b: B) => C): (a: A) => CA) => function (type parameter) C in <A, B, C>(self: (a: A) => B, bc: (b: B) => C): (a: A) => CC
} = const dual: <(...args: Array<any>) => any, <A, B, C>(ab: (a: A) => B, bc: (b: B) => C) => (a: A) => C>(arity: 2, body: <A, B, C>(ab: (a: A) => B, bc: (b: B) => C) => (a: A) => C) => ((...args: Array<any>) => any) & (<A, B, C>(ab: (a: A) => B, bc: (b: B) => C) => (a: A) => C) (+1 overload)dual(2, <function (type parameter) A in <A, B, C>(ab: (a: A) => B, bc: (b: B) => C): (a: A) => CA, function (type parameter) B in <A, B, C>(ab: (a: A) => B, bc: (b: B) => C): (a: A) => CB, function (type parameter) C in <A, B, C>(ab: (a: A) => B, bc: (b: B) => C): (a: A) => CC>(ab: (a: A) => Bab: (a: Aa: function (type parameter) A in <A, B, C>(ab: (a: A) => B, bc: (b: B) => C): (a: A) => CA) => function (type parameter) B in <A, B, C>(ab: (a: A) => B, bc: (b: B) => C): (a: A) => CB, bc: (b: B) => Cbc: (b: Bb: function (type parameter) B in <A, B, C>(ab: (a: A) => B, bc: (b: B) => C): (a: A) => CB) => function (type parameter) C in <A, B, C>(ab: (a: A) => B, bc: (b: B) => C): (a: A) => CC): (a: Aa: function (type parameter) A in <A, B, C>(ab: (a: A) => B, bc: (b: B) => C): (a: A) => CA) => function (type parameter) C in <A, B, C>(ab: (a: A) => B, bc: (b: B) => C): (a: A) => CC => (a: Aa) => bc: (b: B) => Cbc(ab: (a: A) => Bab(a: Aa)))