# Predefined Types

As well as declaring variables with these types, you can also call them just like ordinary functions, in order to test if a value is a certain type.
atom - declare a real number [with fraction|exponent], or test if an object is one.
integer - declare a whole number, or test whether an object is one.
sequence - declare a sequence, or test if an object is one.
string - declare a string (of bytes #00..#FF), or test if an object is one.
object - declare an object (that can be set to any of the above four), or test whether a variable is assigned.
In some cases the compiler issues 'probable logic error' warnings, which can be very helpful:
Should the compiler know the result of say integer(i) with absolute certainty, then obviously the test is completely unnecessary, which in turn strongly suggests that either the wrong thing is being tested, or perhaps the exact same thing is being tested twice. Likewise for atom/string/sequence/object, however the compiler does not (as yet) issue any such warnings about user defined type tests.