Verse cuenta con una construcción especial que puede utilizarse para obtener el tipo de una expresión arbitraria (similar a decltype en C++ moderno): tipo. Puede usarse en cualquier sitio donde se pueda utilizar un tipo. Por ejemplo:
Foo() : int = 0
Bar(X : type{Foo()}) : type{Foo()} = X
Resulta especialmente útil para describir los tipos de función, y debe ofrecer el tipo de resultado de una función como otra función con efectos no predeterminados. Por ejemplo:
comparison := enum:
LT
EQ
GT
Less(X : int, Y : int)<decides> : int =
X < Y
Equal(X : t, Y:comparable where t:subtype(comparable))<decides> : t =
X = Y
Greater(X : int, Y : int)<decides> : int =
X > Y
Comparison(Arg : comparison) : type{_(:int, :int)<decides> : int} =
case (Arg):
comparison.LT => Less
comparison.EQ => Equal
comparison.GT => Greater
Aquí, la expresión de comparación convierte una enumeración de comparación en la operación de comparación a la que corresponde cada valor de enumeración específico. En este ejemplo, también se usa el identificador especial _, que puede utilizarse en type en sitios donde se espera un identificador sin tener que ofrecer un nombre que, de otro modo, no se utilizaría.