Verse dispone de una construcción especial que sirve para obtener el tipo de una expresión arbitraria (de forma parecida a decltype en C++ moderno): type. Se puede utilizar en cualquier lugar 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 funciones, y es necesario para proporcionar el tipo de resultado de una función como otra función sin efectos 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 con la que se corresponde cada valor específico de la enumeración. En este ejemplo también se utiliza el identificador especial _, que se puede utilizar en type en lugares donde se espera un identificador sin tener que proporcionar un nombre que, por lo demás, no se utiliza.