In constructing a general purpose programming language, a key issue is providing a sufficient set of data types and associated operations in a manner that permits both natural problem-oriented notation and efficient implementation. The ELI language contains a number of features specificatly designed to simultaneously satisfy both requirements. The resulting treatment of data types includes provision for programmer-defined data types and generic routines, programmer control over type conversion, and very flexible data type behavior, in a context that allows efficient compiled code and compact data representation. The present version of ELI in the ECL programming system runs on the PDP-10 under the TOPS and TENEX monitors. Versions for other machines are contemplated.