Such types may not be used as fields in structs or unions, or in arrays. However, pointers to them may be created. If Type is not bound at call time, these procedures will backtrack through all current type definitions. Firstly, intermediate type names have been elided. Also, in the definition of a compound type, types of parts are always defined by type names, rather than complex specifications.
Size is the number of bytes occupied by an object of type Type , or the atom unknown , as above.
If Type is unbound at call time, these predicates will backtrack through all the currently defined atomic types. Each type you declare in your .pl file will have a corresponding typedef in the .h file. But more importantly, you are more likely to get type mismatches, and likely to get unwrapped terms or even doubly wrapped terms where you expect wrapped ones. Looked at another way, what resides in memory at address 123456 is of type fred. The wrapper put on a foreign term signifies the type of that foreign term.