Module:UtilsFunction

local p = {}

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

function p.memoize(fn) local cache = {} return function(...) local key = mw.dumpObject({...}) if not cache[key] then cache[key] = fn(...) end return cache[key] end 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

function p.pipe(...) local state = {...} return function(functions) 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