Verse dispose d'une construction spéciale qui peut être utilisée pour obtenir le type d'une expression arbitraire (semblable à decltype en C++ moderne) : type. Elle peut être utilisée partout où un type peut être utilisé. Par exemple :
Foo() : int = 0
Bar(X : type{Foo()}) : type{Foo()} = X
Il est particulièrement utile de décrire les types de fonctions, et il est nécessaire de donner le type de résultat d'une fonction en tant qu'autre fonction, avec des effets autres que ceux par défaut. Par exemple :
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
Ici, l'expression de comparaison convertit une énumération de comparaison en l'opération de comparaison à laquelle correspond chaque valeur particulière de l'énumération. Cet exemple utilise également l'identificateur spécial _, qui peut être utilisé dans type aux endroits où un identifiant est attendu sans avoir à fournir un nom par ailleurs inutilisé.