From 6c7feb87923db7f2cc15470d516d6e882d6bba72 Mon Sep 17 00:00:00 2001 From: William Boman Date: Thu, 8 Dec 2022 02:00:29 +0100 Subject: feat(functional): add more functions (#741) --- lua/mason-core/functional/function.lua | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'lua/mason-core/functional/function.lua') 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 _ -- cgit v1.2.3-70-g09d2