People like to categorize programming languages into paradigms. There are object-oriented (OO) languages, imperative languages, functional languages, etc. This can be helpful in figuring out which languages solve similar problems, and what types of problems a language is intended to solve.
In each case a paradigm generally has one “main” focus and technique that is the driving force for that family of languages:
- In OO languages, it is the class or object as a way to encapsulate state (data) with manipulation of that state (methods).
- In functional languages, it can be the manipulation of functions themselves or the immutable data passed from function to function.
While Elixir (and Erlang before it) are often categorized as functional languages because they exhibit the immutable data common to functional languages, I would submit they represent a separate paradigm from many functional languages. They exist and are adopted because of the existence of OTP, and so I would categorize them as process-oriented languages.