--[=[
	Constructs a new symbol

	@param id any -- Identifier for the symbol (usually a string)
	@param scope Symbol? -- Optional symbol scope
	@return boolean -- Returns `true` if the `obj` parameter is a Symbol
]=]

function Symbol.new(id: any, scope: any)
	assert(id ~= nil, "Symbol ID cannot be nil")
	if scope ~= nil then
		assert(Symbol.Is(scope), "Scope must be a Symbol or nil")
	end
	local self = setmetatable({
		ClassName = CLASSNAME;
		_id = id;
		_scope = scope;
	}, Symbol)
	return self
end

