local c=require(script.Parent.symbol)local N=newproxy(true)local z={}local function m(N)z[N]=c.named("\075\111\097\099\116"..N)end m("\067\111\110\116\101\120\116")m("\069\108\101\109\101\110\116")m("\076\111\099\097\108\105\122\097\116\105\111\110")m("\070\114\097\103\109\101\110\116")function z.of(c)if typeof(c)~="\116\097\098\108\101"then return nil end return c[N]end;(getmetatable(N)).__index=z;(getmetatable(N)).__tostring=function()return"\075\111\097\099\116\084\121\112\101"end return N
--[[
	Contains markers for annotating objects with types.

	To set the type of an object, use `Type` as a key and the actual marker as
	the value:

		local foo = {
			[Type] = Type.Foo,
		}
]]

local Symbol = require(script.Parent.symbol)

local Type = newproxy(true)

local TypeInternal = {}

local function addType(name)
	TypeInternal[name] = Symbol.named("Koact" .. name)
end

addType("Context")
addType("Element")
addType("Localization")
addType("Fragment")

function TypeInternal.of(value)
	if typeof(value) ~= "table" then
		return nil
	end

	return value[Type]
end

getmetatable(Type).__index = TypeInternal

getmetatable(Type).__tostring = function()
	return "KoactType"
end

return Type
