After reading the paper and watching the lecture, I think I know what it means that Types are first class values.
In verse `=` is unification and not assignment or comparison. Meaning its a constraint on the lhs and rhs. Unification is also an expression meaning it can be normalized to a value e.g. `x=3` normalizes to `3`
Expressions can be sequenced with `;` but note this is nothing like imperative programming due to unification. These sequences normalize to the last expression in the sequence but the unifications in all subexpressions apply to the whole sequence. Thus `=` appearing in subexpressions in any order does not change the resulting value (since the compiler uses normalization)
Now functions can be seen as lambdas or anonymous functions to these sequences of expressions where the arguments are also constraints! These functions themselves are values. Thus functions are first class.
Another key aspect of unification is that functions can run backwards. Thus `swap` will return `. But so will `swap(p) = ` constrain `p` to `. Thus the meaning of function is no longer just a procedure. But more of a specification or constraint.
And this is exactly what types are in Verse. Types are functions thus first class. When we say `i : Int` it is akin to saying `Int(i)` constraining the variable `i` based on the constraint `Int`.
Thus if you have a function that succeeds when given an even number, that function can be seen as a type of even numbers.