My book Sebasta's Concepts of Programming Language (Chapter 1) states:
Orthogonality in a programming language means that a relatively small set of primitive constructs can be combined in a relatively small number of ways to build the control and data structures of the language. Furthermore, every possible combination of primitives is legal and meaningful. For example, consider data types. Suppose a language has four primitive data types (integer, float, double, and character) and two type operators (array and pointer). If the two type operators can be applied to themselves and the four primitive data types, a large number of data structures can be defined.
This explanation feels too contrived, can someone boil it down for me? What does "type operators can be applied to themselves" mean and how does that lead to a large number of data structures? I am not sure I undestand the first sentence as well.