> For the complete documentation index, see [llms.txt](https://civilcode.gitbook.io/playbook/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://civilcode.gitbook.io/playbook/education/trails/type-classes.md).

# Type Classes

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](https://fsharpforfunandprofit.com/ddd/)
* Short Read: [The "Designing with types"  series](https://fsharpforfunandprofit.com/series/designing-with-types.html)
* Long Read: [Domain Modeling Made Functional](https://fsharpforfunandprofit.com/books/#domain-modeling-made-functional-ebook-and-paper)
