function t.numberConstrainedExclusive(G,R)assert(t.number(G))assert(t.number(R))local d=t.numberMinExclusive(G)local q=t.numberMaxExclusive(R)return function(G)local R,E=d(G)if not R then return false,E or""end local A,c=q(G)if not A then return false,c or""end return true end end
--[[**
	ensures value is a number where min < value < max

	@param min The minimum to use
	@param max The maximum to use

	@returns A function that will return true iff the condition is passed
**--]]
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
