A TypeNode is a kind of LexicalNode that acts as a type constructor for the primitive data types, the atom types. It is typically used to declare the type of a VariableNode. It can also be combined with other type constructors to declare more complex types.
Thus, for example, the declaration
TypedVariableLink VariableNode $F TypeNode "ConceptNode"
Thus, for example
SignatureLink ListLink TypeNode "ConceptNode" TypeNode "ConceptNode"
The TypeNode can be thought of as a special case of a PredicateNode: it is something that evaluates to true, when the indicated object has the specified type, and evaluates to false, when it does not.
The TypeInhNode provides a way of specifying a type, or any of it's derived types. Similarly, the TypeCoInhNode provide a way of specifying a type or any of it's base types. These can be thought of as being lower and upper bounds on the type hierarchy.
Ranges of types can be specified using the TypeSetLink.