function t.numberConstrainedExclusive(M,B)assert(t.number(M))assert(t.number(B))local S=t.numberMinExclusive(M)local q=t.numberMaxExclusive(B)return function(M)local B,Q=S(M)if not B then return false,Q or""end local u,T=q(M)if not u then return false,T or""end return true end end

function t.numberConstrainedExclusive(min, max)
	assert(t.number(min))
	assert(t.number(max))
	local minCheck = t.numberMinExclusive(min)
	local maxCheck = t.numberMaxExclusive(max)

	return function(value)
		local minSuccess, minErrMsg = minCheck(value)
		if not minSuccess then
			return false, minErrMsg or ""
		end

		local maxSuccess, maxErrMsg = maxCheck(value)
		if not maxSuccess then
			return false, maxErrMsg or ""
		end

		return true
	end
end
