Module:UtilsFunction

local p = {}

function p.identity(...) return ... end

function p.negate(fn) return function(...) return not fn(...) end end

function p.noop return nil end

function p.peek(tbl) mw.logObject(tbl) return tbl end

-- @args {fn1, fn2, ..., fnN} -- @returns A single function whose arguments are passed to fn1. Output of fn1 is passed to fn2, and so on. -- Similar to https://lodash.com/docs/#flow function p.pipe(...) local functions = {...} return function(...) local state = {...} for _, fn in ipairs(functions) do			state = {fn(unpack(state))} end return unpack(state) end end

-- http://lua-users.org/wiki/RangeIterator function p.range(a, b, step) if not b then b = a   a = 1 end step = step or 1 local f = step > 0 and function(_, lastvalue) local nextvalue = lastvalue + step if nextvalue <= b then return nextvalue end end or   step < 0 and function(_, lastvalue) local nextvalue = lastvalue + step if nextvalue >= b then return nextvalue end end or     function(_, lastvalue) return lastvalue end return f, nil, a - step end

return p