Um tipo é um nome que denota uma coleção de valores.
> 2 + True
error: ...
Porque "+" deve ser aplicada a números e True não é um número.
Se não houver concordância entre o tipo das funções e os seus argumentos, o programa é rejeitado pelo compilador.
Toda a expressão Haskell bem formada tem um tipo que é automaticamente calculado em tempo de compilação por um mecanismo chamado inferência de tipos
Por isso se diz que a linguagem Haskell é “statically typed” (digitado estatisticamente)
Todos os erros de tipo são encontrados em tempo de compilação, o que torna os programas mais robustos
Os tipos permitem assim programar de forma mais produtiva, com menos erros
<aside> 💡 Num programa Haskell não é obrigatório escrever os tipos, o compilador infere-os, mas é boa prática escreve-los pois é uma forma de documentar o código.
</aside>