diff options
Diffstat (limited to 'lua/mason-core/functional/function.lua')
| -rw-r--r-- | lua/mason-core/functional/function.lua | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lua/mason-core/functional/function.lua b/lua/mason-core/functional/function.lua index f1475229..6f1806db 100644 --- a/lua/mason-core/functional/function.lua +++ b/lua/mason-core/functional/function.lua @@ -94,4 +94,29 @@ _.tap = _.curryN(function(fn, value) return value end, 2) +---@generic T, U +---@param value T +---@param fn fun(value: T): U +---@return U +_.apply_to = _.curryN(function(value, fn) + return fn(value) +end, 2) + +---@generic T, R, V +---@param fn fun (args...: V[]): R +---@param args V[] +---@return R +_.apply = _.curryN(function(fn, args) + return fn(args) +end, 2) + +---@generic T, V +---@param fn fun(...): T +---@param fns (fun(value: V))[] +---@param val V +---@return T +_.converge = _.curryN(function(fn, fns, val) + return fn(unpack(vim.tbl_map(_.apply_to(val), fns))) +end, 3) + return _ |
