Although Elixir is not a strongly typed language, we do think in terms of Types. We lean on Dialyzer to enforce contracts and to enforce types for inputs and outputs. Our thinking on Types are heavily influenced by ML style functional programming languages.
Type Classes enable Domain-Driven Design.
- Watch: Domain Modeling Made Functional
- Short Read: The "Designing with types" series
- Long Read: Domain Modeling Made Functional