function bind(func, ...)
	local args = {...}

	return	function(...)
				local localArgs = {}

				for i, arg in ipairs(args) do
					table.insert(localArgs, arg)
				end

				for i, arg in ipairs({...}) do
					table.insert(localArgs, arg)
				end

				return func(unpack(localArgs))
			end 
end