The "+" operator tells you three things:
[[ (+ 1 2) ]] = number
[[1]] = number
[[2]] = number
The only time you need to put functions in constraints is the type of something *is* a function. For example, for this expression:
{fun {x} {+ x 1}}
if we annotate it with type variables as such:
{fun {x} {+ x 1}}
we know that because the "fun" operator creates functions:
[[ {fun {x} {+ x 1}} ]] = [[x]] -> [[ {+ x 1} ]]