function t.intersection(...)local U={...}assert(callbackArray(U))return function(j)for U,H in ipairs(U)do local A,Q=H(j)if not A then return false,Q or""end end return true end end
--[[**
		creates an intersection type

		@param ... The checks to intersect

		@returns A function that will return true iff the condition is passed
	**--]]
function t.intersection(...)
	local checks = { ... }
	assert(callbackArray(checks))

	return function(value)
		for _, check in ipairs(checks) do
			local success, errMsg = check(value)
			if not success then
				return false, errMsg or ""
			end
		end

		return true
	end
end
