O type system de Swift é muito versátil e poderoso. Explorando noções de álgebra e “abusando” dos generics conseguimos expressar muitas das regras de negócio das nossas aplicações nas definições dos nossos tipos, impedindo situações de negócio impossíveis em tempo de compilação e prevenindo mais bugs em tempo de execução. Vamos entender como podemos ser mais criativos nas nossas definições de tipo usando conceitos emprestados de linguagens puramente funcionais e algumas artimanhas.