A definição de funções faz-se através de uma sequência de equações da forma:

<aside> ➡️ nome $arg1$ $arg2$ $...$ $argn$ = expressão

</aside>

O nome das funções começa sempre por letra minúscula ou underscore (_).

Quando se define uma função podemos indicar o seu tipo. No entanto, isso não é obrigatório.

O tipo de cada função é deduzido automaticamente pelo compilador.

O compilador infere o tipo mais geral que se pode associar à função. No entanto, é possível atribuir à função um tipo mais especifico.

swap :: (a,b) -> (b,a)
swap (x,y) = (y,x)
troca :: (Int,Char) -> (Char,Int)
troca (x,y) = (y,x)

<aside> 💡 É boa prática de programação indicar o tipo das funções definidas nas scripts Haskell.

</aside>

Exemplos :