Primitives communicate with each other by sending objects of Particle type. A basic set of types, including scalar and array types, inherited from the Particle class, is built into the MLDesigner kernel. Since all of these particle types are derived from the same base class, it is possible to write primitives that operate on any of them (by referring only to the base class). It is also possible to define new types that contain arbitrary C++ objects.