compose
compose :: (Function f, Function g, ...) => Function f ∘ g ∘ ...description
Returns a function which composes its given parameter functions right to left. Function composition is at the heart of functional programming, and that's why it is one of conductor's most important functions.
But that's not all! compose also has magic powers: it composes synchronous functions, asynchronous functions or even a mix of both! It accepts as many arguments as the rightmost function does, and has the same arity.
examples
basic example
import { compose } from 'conductor'
const times2 = x => 2 * x
const minus3 = x => x - 3
compose(minus3, times2)(5) // 7 === (2 * 5) - 3 : functions are composed right to leftarity preservation
import {compose} from '@waldojeffers/conductor'
const multiply = (x, y) => x * y
const minus3 = x => x - 3
compose(minus3, multiply)(2, 5) // 7 === (2 * 5) - 3
compose(minus3, multiply)(2)(5) // 7
compose(minus3, multiply).length // 2Even if multiply and minus3 do not accept the same number of arguments, compose will help you make their composition a breeze! It will simply accept as many arguments as multiply does : 2. You can verify that by accessing the length property on the composition's result. Even better, compose's result will be curried, even if its rightmost argument is not.
synchronous and asynchronous function composition
import {compose} from '@waldojeffers/conductor'
const times2 = x => 2 * x
const minus3 = x => x - 3
const times2Async = async x => times2(x) // async keyword makes it return a Promise
const minus3Async = async x => minus3(x) // async keyword makes it return a Promise
compose(minus3, times2)(5) // 7
await compose(minus3Async, times2Async)(2, 5) // 7 : we need to await because it is an async function
await compose(minus3, times2Async) // 7
await compose(minus3Async, times2) // 7Even if multiply and minus3 do not accept the same number of arguments, compose will help you make their composition a breeze! It will simply accept as many arguments as multiply does : 2. You can verify this by accessing the length property on the composition's result. Even better, compose's result will be curried, even if its rightmost argument is not.
Last updated