Function
after
Takes a function and returns a new function that when called, will suppress the first times
invocations.
function after<A extends any[], B>(times: number, fn: (...args: A) => B): (...args: A) => B
function after<A extends any[], B>(fn: (...args: A) => B): (times: number) => (...args: A) => B
const addTwo = F.after(2, N.add(2))
addTwo(4) // → None
addTwo(8) // → None
addTwo(16) // → Some(18)
allPass
Determines whether all the provided predicates return true
for the given value.
function allPass<A>(value: A, fns: Array<(_1: A) => boolean>): boolean
function allPass<A>(fns: Array<(_1: A) => boolean>): (value: A) => boolean
always
Returns a function that always returns the provided value.
function always<A>(value: A): () => A
anyPass
Determines whether at least one of the provided predicate returns true
for the given value.
function anyPass<A>(value: A, fns: Array<(_1: A) => boolean>): boolean
function anyPass<A>(fns: Array<(_1: A) => boolean>): (value: A) => boolean
before
Takes a function and returns a new function which when called, will allow the first times
calls to invoke the given function, and any successive calls will be suppressed and the last result will be returned.
function before<A extends any[], B>(times: number, fn: (...args: A) => B): (...args: A) => B
function before<A extends any[], B>(fn: (...args: A) => B): (times: number) => (...args: A) => B
const addOne = F.before(2, N.add(1))
addOne(3) // → 4
addOne(6) // → 7
addOne(12) // → 7
both
Calls the two provided functions and returns &&
of the results → fn0(value) && fn1(value)
.
function both<A>(value: A, fn0: (_1: A) => boolean, fn1: (_1: A) => boolean): boolean
function both<A>(fn0: (_1: A) => boolean, fn1: (_1: A) => boolean): (value: A) => boolean
coerce
Takes a value and coerces a new type.
function coerce<T>(value: any): T
debounce
Takes a function, and returns a new function (no control values) which when called, will only invoke the given input function after a period of inactivity.
function debounce<A extends any[]>(fn: (...args: A) => void, delay: number): (...args: A) => void
function debounce<A extends any[]>(delay: number): (fn: (...args: A) => void) => (...args: A) => void
defaultTo
Returns a default value if value
is nullable.
function defaultTo<A, B extends NonNullable<A>>(value: A, defaultValue: B): B
function defaultTo<A, B extends NonNullable<A>>(defaultValue: B): (value: A) => B
F.defaultTo(nullable, 'default') // → 'default'
pipe(2, F.defaultTo(1)) // → 2
either
Calls the two provided functions and returns ||
of the results → fn0(value) || fn1(value)
.
function either<A>(value: A, fn0: (_1: A) => boolean, fn1: (_1: A) => boolean): boolean
function either<A>(fn0: (_1: A) => boolean, fn1: (_1: A) => boolean): (value: A) => boolean
equals
Returns true
if provided values are equal, otherwise, returns false
.
function equals<A, B = A>(snd: A): (fst: B) => boolean
function equals<A, B = A>(fst: A, snd: B): boolean
function equals<A, B = A>(snd: B): (fst: A) => boolean
function equals(): boolean
F.equals([1, [2]], [1, [2]]) // → true
pipe({ name: 'Joe' }, F.equals({ name: 'John' })) // → false
falsy
Always returns false
.
function falsy(): boolean
identity
Always returns the provided value, useful as a placeholder function.
function identity<A>(value: A): A
ifElse
Tests the given value by passing it to the predicate, if the predicate is satisfied, the function returns the result of truthyFn
, otherwise, returns the result of falsyFn
.
function ifElse<A, B>(
value: A,
predicateFn: (_1: A) => boolean,
truthyFn: (_1: A) => B,
falsyFn: (_1: A) => B
): B
function ifElse<A, B>(
predicateFn: (_1: A) => boolean,
truthyFn: (_1: A) => B,
falsyFn: (_1: A) => B
): (value: A) => B
ignore
Always returns void
, useful as a placeholder function.
function ignore(): void
makeControlledDebounce
Takes a function, and returns a new function (and other control values) which when called, will only invoke the given input function after a period of inactivity. If leading
is set to true
, the function will be invoked immediately.
function makeControlledDebounce<A extends any[]>(fn: (...args: A) => void, options: Options): Controlled<A>
function makeControlledDebounce<A extends any[]>(options: Options): (fn: (...args: A) => void) => Controlled<A>
makeControlledThrottle
Takes a function and returns a new function (and other control values) which when used, suppresses calls to the given function to only once within the given delay
. If leading
is set to true
, the function will be allowed to run on the first call before the throttling starts.
function makeControlledThrottle<A extends any[]>(fn: (...args: A) => void, options: Options): Controlled<A>
function makeControlledThrottle<A extends any[]>(options: Options): (fn: (...args: A) => void) => Controlled<A>
memoize
Alias for once
.
function memoize<A extends any[], B>(fn: (...args: A) => B): (...args: A) => B
memoizeWithKey
Takes a function and returns a new function which once called, stores the result produced by the given function in a closure-based cache, using a cache key created by the function makeKeyFn
.
function memoizeWithKey<A extends any[], B>(fn: (...args: A) => B): (makeKeyFn: (...args: A) => string) => (...args: A) => B
function memoizeWithKey<A extends any[], B>(makeKeyFn: (...args: A) => string, fn: (...args: A) => B): (...args: A) => B
let calls = 0
const makeArray = F.memoizeWithKey(S.make, (value: number) => {
calls = calls + 1
return A.makeWithIndex(value, index => index * 2)
})
makeArray(4) // → [0, 2, 4, 6]
makeArray(4) // → [0, 2, 4, 6]
makeArray(4) // → [0, 2, 4, 6]
calls // → 1
once
Takes a function and returns a new function which will invoke the given function once, and any successive calls will be suppressed, returning the value of the first call.
function once<A extends any[], B>(fn: (...args: A) => B): (...args: A) => B
const addTwoOnce = F.once(N.add(2))
addTwoOnce(4) // → 6
addTwoOnce(8) // → 6
addTwoOnce(16) // → 6
tap
Applies a side-effect function on the given value and returns the original value.
function tap<A>(value: A, fn: (_1: A) => void): A
function tap<A>(fn: (_1: A) => void): (value: A) => A
pipe(
A.makeWithIndex(3, N.succ),
F.tap(xs => console.log(xs)),
A.map(value => value * 2),
) // → [2, 4, 6]
throttle
Takes a function and returns a new function (no control values) which when used, suppresses calls to the given function to only once within the given delay
.
function throttle<A extends any[]>(fn: (...args: A) => void, delay: number): (...args: A) => void
function throttle<A extends any[]>(delay: number): (fn: (...args: A) => void) => (...args: A) => void
toMutable
Takes a value and converts its immutable type to a mutable one.
function toMutable<T>(value: T): Mutable<T>
truthy
Always returns true
.
function truthy(): boolean
tryCatch
Takes a function, which is called in the try/catch
block, and returns the Result
data type.
function tryCatch<A, B>(value: A, fn: (value: A) => B): Result<B, string>
function tryCatch<A, B>(fn: (value: A) => B): (value: A) => Result<B, string>
type User = {
readonly prop: string
}
F.tryCatch('{"name": "Joe"}', JSON.parse) // → Ok({ name: 'Joe' })
F.tryCatch('<>', JSON.parse) // → Error('Unexpected token < in JSON at position 0')
pipe(
'{"name": "Joe"}',
F.tryCatch<string, User>(JSON.parse),
R.map(user => user.name),
R.getWithDefault('oops'),
) // → 'Joe'
pipe('<>', F.tryCatch(JSON.parse), R.toOption, O.getWithDefault('oops')) // → 'oops'
unless
Tests the given value by passing it to the predicate, if the predicate is satisfied, the function returns value
, otherwise, returns the result of falsyFn
.
function unless<A, B>(value: A, predicateFn: (value: A) => boolean, falsyFn: (value: A) => B): A | B
function unless<A, B>(predicateFn: (value: A) => boolean, falsyFn: (value: A) => B): (value: A) => A | B
F.unless(
'ts',
value => value.length > 2,
value => `${value}-belt`,
) // → 'ts-belt'
pipe(
'ts',
F.unless(
value => value.length > 0,
value => `${value}-belt`,
),
) // → 'ts'
when
Tests the given value by passing it to the predicate, if the predicate is satisfied, the function returns the result of truthyFn
, otherwise, returns value
.
function when<A, B>(value: A, predicateFn: (value: A) => boolean, truthyFn: (value: A) => B): A | B
function when<A, B>(predicateFn: (value: A) => boolean, truthyFn: (value: A) => B): (value: A) => A | B
F.when(
'ts',
value => value.length > 1,
value => `${value}-belt`,
) // → 'ts-belt'
pipe(
'ts',
F.when(
value => value.length > 2,
value => `${value}-belt`,
),
) // → 'ts'