1+ --- @class PlenaryFunctional
12local f = {}
23
4+ --- @generic T , U
5+ --- @param t table<T , U>
6+ --- @return { [1] : T , [2] : U } []
37function f .kv_pairs (t )
48 local results = {}
59 for k , v in pairs (t ) do
@@ -8,14 +12,27 @@ function f.kv_pairs(t)
812 return results
913end
1014
15+ --- @generic T , U , V
16+ --- @param fun fun ( pair : { [1] : T , [2] : U }): V
17+ --- @param t table<T , U>
18+ --- @return V[]
1119function f .kv_map (fun , t )
1220 return vim .tbl_map (fun , f .kv_pairs (t ))
1321end
1422
23+ --- @generic T
24+ --- @param array T[]
25+ --- @param sep ? string
26+ --- @return string
1527function f .join (array , sep )
1628 return table.concat (vim .tbl_map (tostring , array ), sep )
1729end
1830
31+ --- @param fn function
32+ --- @param n integer
33+ --- @param a any
34+ --- @param ... any
35+ --- @return function
1936local function bind_n (fn , n , a , ...)
2037 if n == 0 then
2138 return fn
@@ -25,10 +42,17 @@ local function bind_n(fn, n, a, ...)
2542 end , n - 1 , ... )
2643end
2744
45+ --- @param fun function
46+ --- @param ... any
47+ --- @return function
2848function f .partial (fun , ...)
2949 return bind_n (fun , select (" #" , ... ), ... )
3050end
3151
52+ --- @generic T , U
53+ --- @param fun fun ( k : T , v : U ): boolean
54+ --- @param iterable table<T , U>
55+ --- @return boolean
3256function f .any (fun , iterable )
3357 for k , v in pairs (iterable ) do
3458 if fun (k , v ) then
@@ -39,6 +63,10 @@ function f.any(fun, iterable)
3963 return false
4064end
4165
66+ --- @generic T , U
67+ --- @param fun fun ( k : T , v : U ): boolean
68+ --- @param iterable table<T , U>
69+ --- @return boolean
4270function f .all (fun , iterable )
4371 for k , v in pairs (iterable ) do
4472 if not fun (k , v ) then
@@ -49,6 +77,11 @@ function f.all(fun, iterable)
4977 return true
5078end
5179
80+ --- @generic T , U
81+ --- @param val any ?
82+ --- @param was_nil T
83+ --- @param was_not_nil U
84+ --- @return T | U
5285function f .if_nil (val , was_nil , was_not_nil )
5386 if val == nil then
5487 return was_nil
@@ -57,6 +90,9 @@ function f.if_nil(val, was_nil, was_not_nil)
5790 end
5891end
5992
93+ --- @generic T
94+ --- @param n integer
95+ --- @return fun ( ... : T ): T
6096function f .select_only (n )
6197 return function (...)
6298 local x = select (n , ... )
@@ -68,6 +104,9 @@ f.first = f.select_only(1)
68104f .second = f .select_only (2 )
69105f .third = f .select_only (3 )
70106
107+ --- @generic T
108+ --- @param ... T
109+ --- @return T
71110function f .last (...)
72111 local length = select (" #" , ... )
73112 local x = select (length , ... )
0 commit comments