function t.numberConstrainedExclusive(e,J)assert(t.number(e)and t.number(J))local B=t.numberMinExclusive(e)local g=t.numberMaxExclusive(J)return function(e)local J,M=B(e)if not J then return false,M or""end local H,h=g(e)if not H then return false,h or""end return true end end

function t.numberConstrainedExclusive(min, max)
	assert(t.number(min) and 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
